传递日期和日期时间之间的Javascript Date()差异

Javascript Date() difference between passing date and date-time

本文关键字:日期 Date Javascript 差异 之间 时间      更新时间:2023-11-13

为什么我在传递日期时与传递日期和时间时使用new Date()获得两个不同的日期?

示例:

Date.parse('2015-03-14')
// 1426291200000
new Date(1426291200000)
// Fri Mar 13 2015 17:00:00 GMT-0700 (PDT)
Date.parse('2015-03-14 00:00:00')
// 1426316400000
new Date(1426291400000)
// Fri Mar 13 2015 17:03:20 GMT-0700 (PDT)

对不起,我还不能发表评论。您在Date.parse()中通过的string必须遵循

ECMAScript 5 ISO-8601格式支持.此处的参考链接

ECMAScript 2015 中指定的格式

据此,日期与时间的格式必须是:'2015-03-14T00:00:00'而不是'2015-03-14 00:00:00'

由于Date.parse('2015-03-14')的时间在GMT+00,但Date.parse('2015-03-14T00:00:00')在您的时区,因此如果将时区GMT+00添加到第二个时区,两个时间将相等:

Date.parse('2015-03-14');
Date.parse('2015-03-14T00:00:00+00:00');
//1426291200000

为什么当我传递日期时与传递日期和时间时,我会用新日期()获得两个不同的日期?

因为使用Date构造函数解析字符串(以及Date.parse,它们是等效的)在很大程度上依赖于实现,因此强烈建议不要这样做。

Date.parse('2015-03-14')
// 1426291200000
new Date(1426291200000)
// Fri Mar 13 2015 17:00:00 GMT-0700 (PDT)

在符合ES5及更高版本的浏览器中,ISO 8601格式的日期被视为UTC(以及UTC,本地或在早期实现中无效),但并非所有浏览器都符合。此外,指定的行为与ISO 8601不一致,ISO 8601规定没有时区的日期将被视为本地日期。

Date.parse('2015-03-14 00:00:00')
// 1426316400000
new Date(1426291400000)
// Fri Mar 13 2015 17:03:20 GMT-0700 (PDT)

字符串"2015-03-14 00:00:00"不符合ISO 8601,因此解析完全取决于实现,可能被视为UTC、本地或无效。如果符合添加的"T":

"2015-03-14T00:00:00"

应该被视为本地(注意前面提到的关于不兼容实现的警告)。

强烈建议您始终手动解析字符串。使用一个库,这是许多优秀的解析器之一,或者只是编写自己的函数,2到3行就足够了。