【问题标题】:ECMAScript 5.1 specification incorrect? Date constructor date/time format parsed as UTCECMAScript 5.1 规范不正确?日期构造函数日期/时间格式解析为 UTC
【发布时间】:2012-12-30 23:14:47
【问题描述】:

根据维基百科的ISO-8601 文章(我知道,来源不好)...

如果没有给出带有时间表示的 UTC 关系信息,则假定时间为本地时间。

所以,例如..给定:

  • var a = Date.parse("2012-03-21");
  • var b = Date.parse("2012-03-21T00:00");
  • var c = Date.parse("2012-03-21T00:00Z");

我希望“a”和“b”是本地时间(浏览器的时区),而“c”是 UTC。但是,a、b 和 c 都是等价的 (1332288000000)。所有值都被解析为 UTC。

ECMAScript 规范也明确指出:

15.9.1.15 日期时间字符串格式

缺席时区偏移的值为“Z”。

为什么会出现这种差异?维基百科不正确还是 ECMAScript 规范不正确?如何在浏览器中将 ISO-8601 字符串解析为本地时间(不知道浏览器的时区)?

【问题讨论】:

  • 好吧,也许浏览器时区实际上是UTC?
  • 奇怪的评论。不,这是美国东部标准时间。
  • 这条评论有什么奇怪的,如果你在英国,你的 localtime 和 UTC 会产生相同的结果......

标签: javascript date datetime ecmascript-5 iso8601


【解决方案1】:

是的,ES5.1 不正确。

ECMAScript 6 草案现在说“如果不存在时区偏移,则日期时间将被解释为本地时间。”

【讨论】:

    【解决方案2】:

    如何在浏览器中将 ISO-8601 字符串解析为本地时间(不知道浏览器的时区)?

    使用toLocaleString 方法来做到这一点:

    var foo = new Date("2012-03-21").toLocaleString()
    var bar = new Date("2012-03-21T00:00").toLocaleString()
    var baz = new Date("2012-03-21T00:00Z").toLocaleString()
    

    参考文献

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 2021-06-29
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 2013-09-15
      相关资源
      最近更新 更多