ECMAScript 5.1规范不正确?解析为UTC的日期构造函数日期/时间格式

时间:2013-01-16 15:21:31

标签: javascript date datetime ecmascript-5 iso8601

根据维基百科的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。15。15日期时间字符串格式

     

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

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

2 个答案:

答案 0 :(得分:2)

是的,ES5.1不正确。

ECMAScript 6草案现在说"如果没有时区偏移,则日期时间被解释为当地时间。"

答案 1 :(得分: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()

<强>参考