1

根据维基百科的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 字符串解析为浏览器中的本地时间(不知道浏览器的时区)?

4

2 回答 2

2

是的,ES5.1 是不正确的。

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

于 2015-01-18T00:08:37.827 回答
1

如何将 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()

参考

于 2014-02-13T01:46:16.313 回答