Javascript日期构造函数在IE和Chrome中的行为有所不同

时间:2014-07-02 14:44:39

标签: javascript date cross-browser

我已将系统时间设置为UTC。

IE 10

new Date("2014-06-07T19:00:00") //星期六6月7日 19:00:00 UTC +0100 2014

Chrome 35

new Date("2014-06-07T19:00:00") // 2014年6月7日星期六 20:00:00 GMT +0100(GMT夏令时)

为什么结果与1小时不同?日期构造函数是规范的一部分,因此它应该是跨浏览器的标准?

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

  

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

(我已经想出如何解决这个问题 - 追加时区'Z' - “2014-06-07T19:00:00Z”产生一致的结果,但我感兴趣的是为什么会发生这种情况)

编辑:

@Dark Falcon是的,toISOString为下面的第一个字符串产生不同的结果

http://jsfiddle.net/25UcJ/2/

<p id=container></p>

container.innerHTML = 
new Date("2014-06-07T19:00:00").toISOString() +
'<br>' +
new Date("2014-01-07T19:00:00").toISOString() +
'<br>'+
new Date("2014-06-07T19:00:00Z").toISOString();

IE

2014-06-07T18:00:00.000Z
2014-01-07T19:00:00.000Z
2014-06-07T19:00:00.000Z

2014-06-07T19:00:00.000Z
2014-01-07T19:00:00.000Z
2014-06-07T19:00:00.000Z

编辑:

不确定这是new Date() works differently in Chrome and Firefox的重复,我不是在问如何解决这个问题,我问的是为什么首先存在差异。该问题的公认答案是“你的输入是错误的”。第二个答案说“规格不精确”。我认为两者都不正确 - 请注意我从规范中引用的“缺席时区偏移的值是”Z“。

1 个答案:

答案 0 :(得分:0)

此评论new Date() works differently in Chrome and Firefox回答了这个问题。

这是ECMAScript 5.1规范https://bugs.ecmascript.org/show_bug.cgi?id=112中的一个错误。从对bug的评论来看,Chrome 35似乎实现了规范所说的(字面意思),而IE 10实现了规范实际上要说的内容。

该错误与问题中提到的规范中的相同句子有关:

  

ECMA-262版本5.1(p.179):缺席时区的值   offset是&#34; Z&#34;。

草案版ECMAScript 6(http://people.mozilla.org/~jorendorff/es6-draft.html)将此句改为:

  

如果不存在时区偏移,则将日期时间解释为a   当地时间。