> 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)。与八进制解析有关吗?

Firefox仅接受new Date('2015-01-10'),并返回我期望的结果:Date 2015-01-10T00:00:00.000Z

最佳答案

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

参见Inconsistencies when creating new date objects


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


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

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

09-10 03:36
查看更多