这是我的实验:
> new Date('2011-02-1')
2011-02-01T08:00:00.000Z
> new Date('2011-02-01')
2011-02-01T00:00:00.000Z
有谁知道为什么两者之间有 8 小时的差异?
谢谢!
这实际上取决于浏览器或 JavaScript 运行时实现来确定会发生什么。Date
构造函数符合格式YYYY-MM-DDTHH:mm:ss.sssZ
这是 ISO 8601 扩展格式的简化。如果解析失败,则会发生什么特定于实现。
从本质上讲,由于您未能为2011-02-1
指定DD
,因此由浏览器来决定您将获得的内容。例如,在谷歌浏览器中和火狐浏览器中,我得到了2011-02-01T00:00:00.000Z
但在Safari中,我只是得到一个错误,Invalid Date
.
请参阅 ECMAScript 5 规范:
[...]当给定任何不符合日期时间字符串格式(15.9.1.15)的字符串值并且无法通过
toString
或toUTCString
方法在该实现中生成时,Date.parse
生成的值依赖于实现。
请注意,Date
构造函数使用与Date.parse
相同的解析算法。这就是为什么强烈建议不要对构造函数使用字符串的原因。使用标准化的多参数版本。参见 MDN。