我已将系统时间设置为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为下面的第一个字符串产生不同的结果
<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“。
答案 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 当地时间。