Javascript的“ new Date()”为“ 2011-02-1”和“ 2011-02-01”返回不同的日期

时间:2018-12-15 04:20:53

标签: javascript date

这是我的实验:

> new Date('2011-02-1')
2011-02-01T08:00:00.000Z
> new Date('2011-02-01')
2011-02-01T00:00:00.000Z

有人知道为什么两者之间会有8个小时的差异吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

这实际上取决于浏览器或JavaScript运行时实现来确定会发生什么。 Date构造函数符合格式YYYY-MM-DDTHH:mm:ss.sssZ,它是ISO 8601扩展格式的简化形式。如果解析失败,则特定于实现

从本质上讲,由于您没有为DD指定2011-02-1,因此由浏览器决定要获得的结果。例如,在Google Chrome和Firefox中,我得到了2011-02-01T00:00:00.000Z,而在Safari中我得到了一个错误,Invalid Date

请参见the ECMAScript 5 specification

  

[…]当给定任何不符合日期时间字符串格式(15.9.1.15)且不能在该实现中产生的String值时,Date.parse产生的值取决于实现通过toStringtoUTCString方法。

请注意,Date构造函数使用与Date.parse相同的解析算法。这就是为什么强烈建议不要将字符串用于构造函数。使用标准化的多参数版本。参见MDN