为什么在通过约会时与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)
答案 0 :(得分:3)
很抱歉,我还不能发表评论。您在string
中传递的Date.parse()
必须遵循
ECMAScript 5 ISO-8601格式支持 。参考链接here
根据这一点,您的日期与时间格式必须为:'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行就足够了。