返回不一致结果的日期(取决于是否存在前导零)

Date returning inconsistent results (depending whether leading zero exists)

本文关键字:存在 是否 取决于 结果 不一致 日期 返回      更新时间:2023-09-26
> new Date('2015-1-1')
Thu Jan 01 2015 00:00:00 GMT-0500 (EST)
> new Date('2015-01-1')
Thu Jan 01 2015 00:00:00 GMT-0500 (EST)
> new Date('2015-1-01')
Thu Jan 01 2015 00:00:00 GMT-0500 (EST)
// Yet...
> new Date('2015-01-01')
Wed Dec 31 2014 19:00:00 GMT-0500 (EST)
// Similarly: 
> new Date('2015-1-10')
Sat Jan 10 2015 00:00:00 GMT-0500 (EST)
> new Date('2015-01-10')
Fri Jan 09 2015 19:00:00 GMT-0500 (EST)

无法弄清楚为什么会发生这种情况(Chrome 39)。它与八进制解析有关吗?

火狐只接受new Date('2015-01-10'),并返回我期望的:Date 2015-01-10T00:00:00.000Z

在相关问题中找到了答案;Chrome 似乎将 YYYY-MM-DD 格式解析为 UTC 时间,然后将其转换为本地时区。因此,UTC 中的2015-01-01 00:00:00是美国东部标准时间的 12 月 31 日。

请参阅创建新日期对象时的不一致:

看起来形式"1979-04-05"被解释为 UTC 日期(然后在显示时将该 UTC 日期转换为本地时间)。

显然,一个可能的跨浏览器解决方案是用斜杠替换破折号以强制使用本地时间:

new Date('2015-01-10'.replace(/-/g, '/'))

我不确定你的问题,因为我的chrome(39.0.2171.99)在所有情况下都给了我1月01日。但话虽如此,我想指出您可能应该使用

new Date(2015,1,1)

这就是JS日期应该初始化的方式。