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

时间:2016-04-01 04:00:04

标签: javascript date datetime

为什么在通过约会时与new Date()有2个不同的约会?我通过日期和时间?

示例:

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)

2 个答案:

答案 0 :(得分:3)

很抱歉,我还不能发表评论。您在string中传递的Date.parse()必须遵循

  

ECMAScript 5 ISO-8601格式支持   。参考链接here

     

format specified in ECMAScript 2015

根据这一点,您的日期与时间格式必须为:'2015-03-14T00:00:00'而不是'2015-03-14 00:00:00'

由于Date.parse('2015-03-14')的时间是格林威治标准时间+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

答案 1 :(得分:1)

  

为什么在我通过日期与通过日期和时间时,我会使用新的日期()获得2个不同的日期?

因为使用Date构造函数解析字符串(和 Date.parse ,它们是等价的)在很大程度上取决于实现,因此强烈建议不要使用。

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

ISO 8601格式日期在符合ES5及更高版本的浏览器中被视为UTC(以及UTC,本地或早期实施无效),但并非所有浏览器都符合要求。此外,指定的行为与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行就足够了。