首页 > 解决方案 > 在 Chrome 中解析字符串时,为什么 new Date() 对“YYYY-MM-DD”的处理方式不同?

问题描述

在将字符串解析为日期时,我在 Chrome 中发现了一个有趣的怪癖。这些字符串以相同的方式解析:

new Date("2020 01 01")
=> Wed Jan 01 2020 00:00:00 GMT-0500 (GMT-05:00)

new Date("2020-01 01")
=> Wed Jan 01 2020 00:00:00 GMT-0500 (GMT-05:00)

new Date("2020 01-01")
=> Wed Jan 01 2020 00:00:00 GMT-0500 (GMT-05:00)

但不是这个,它落后几个小时:

new Date("2020-01-03")
=> Tue Dec 31 2019 19:00:00 GMT-0500 (GMT-05:00)

这是一个具有相同代码的代码笔。

为什么会这样?

编辑:这是 Chrome 73.0.3683.103。

Edit2:在节点 LTS 中,问题是相反的:

> new Date("2020 01 01")
2020-01-01T05:00:00.000Z

> new Date("2020-01 01")
2020-01-01T05:00:00.000Z

> new Date("2020 01-01")
2020-01-01T05:00:00.000Z

> new Date("2020-01-01")
2020-01-01T00:00:00.000Z

在 Safari 12.1 中,前三个无效:

new Date("2020 01 01")
=> Invalid Date

new Date("2020-01 01")
=> Invalid Date

new Date("2020 01-01")
=> Invalid Date

最后一个也是错的!

new Date("2020-01-01")
=> Tue Dec 31 2019 19:00:00 GMT-0500 (EST)

标签: javascriptdateecma

解决方案


推荐阅读