【问题标题】:Have a datestring be interpreted the same across browsers跨浏览器对日期字符串进行相同的解释
【发布时间】:2012-06-12 14:30:16
【问题描述】:

所以,我有一个从服务器返回的 ISO 日期时间,例如“2012-06-11T18:05”。这次是 UTC。当我将该字符串传递给 Chrome 或 IE 时,它们会给我本地时间的时间(因此,对于 CDT,它给了 01:05 PM)(这就是我想要的)。如果我将它传递给 Firefox,它会假定它已经是当地时间,它会报告当地时间下午 6:05。所以,我想我会通过执行“2012-06-11T18:05+0000”来将它的 UTC 时间添加到字符串中。这在 Chrome 和 Firefox 中效果很好,但 IE 将其报告为无效日期。

什么是跨浏览器、符合标准的方式我可以指定给定的日期时间字符串表示 UTC 时间?

【问题讨论】:

  • 时间戳,以毫秒为单位,例如:1339511550650
  • 我怎样才能得到它?我在 datetime 对象上使用 NewtonSoft JSON 转换器。我可以让它给我几毫秒吗?
  • 在 javascript 中,您可以使用 +new Date() 获取。然后,您可以通过将其作为参数传递来重构它 -> new Date(x)。您在服务器中使用什么?
  • 好吧,我仍然需要来自我的服务器的日期字符串。 +new Date() 只会给我现在的毫秒数。
  • 是的,这取决于您在服务器中运行的内容。例如,在 PHP 中,您可以执行 time() . "000"

标签: javascript internet-explorer firefox google-chrome


【解决方案1】:

如果您正在寻找一个好的日期库,我写了moment.js 来解决此类问题。它还具有自动 ISO8601 解析功能。

moment("2012-06-11T18:05"); // parse as local time
moment("2012-06-11T18:05+0000"); // parse as utc time

查看http://momentjs.com/docs/ 的文档,了解更多关于该库可以做什么的示例。

【讨论】:

  • 看起来不错。我会给出这个公认的答案,主要是因为我讨厌正则表达式是多么不可读,而给我什么对我有用(仅适用于 IE9)的人没有将它作为答案发布。我不认为我们会使用时刻,只是因为这是我们正在做的日期工作的范围,现在我已经开始工作了。
【解决方案2】:

您可以自己解析传入的数据并使用它来构建有效的日期对象。

类似这样的:

// input (from somewhere)
var incomingDate = "2012-06-11T18:05";
// parse Input using Regexp
var parsedIncomingDate= incomingDate.match(/^(\d{4})\-(\d{2})\-(\d{2})T(\d{2}):(\d{2})$/);
// convert parsed UTC times into ms accoring to the users browser timezone
var getUTCms = Date.UTC(parsedIncomingDate[1],parsedIncomingDate[2], parsedIncomingDate[3], parsedIncomingDate[4], parsedIncomingDate[5]); 

// ms to Date Object
var dateObj = new Date(getUTCms);

【讨论】:

  • 您必须将月份减一。 JavaScript 日期对象中从零开始的月份。
【解决方案3】:

您可以像这样使用Date.UTC 方法:

var my_date = new Date(Date.UTC(2012, 5, 11, 18, 5, 0));

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/UTC

【讨论】:

  • 这并不理想,因为我必须自己解析字符串。我希望不必这样做。
  • 在这里developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…你可以找到解析日期字符串的细节。但如那里所述:尚不支持 ISO 日期中的时区
  • 您必须使用 RFC2822 / IETF 日期语法来添加时区信息。
  • 由于某种原因,这忽略了夏令时。
猜你喜欢
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
相关资源
最近更新 更多