这是我的实验:
> new Date('2011-02-1')
2011-02-01T08:00:00.000Z
> new Date('2011-02-01')
2011-02-01T00:00:00.000Z
有人知道为什么两者之间会有8个小时的差异吗?
谢谢!
答案 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
产生的值取决于实现通过toString
或toUTCString
方法。
请注意,Date
构造函数使用与Date.parse
相同的解析算法。这就是为什么强烈建议不要将字符串用于构造函数。使用标准化的多参数版本。参见MDN。