JavaScript日期:为什么这两个日期不同?

时间:2015-05-21 03:18:45

标签: javascript date

以下是我的调试器中的代码:

new Date('05-20-2015').toString()
"Wed May 20 2015 00:00:00 GMT-0500 (Central Daylight Time)"
new Date('2015-05-20').toString()
"Tue May 19 2015 19:00:00 GMT-0500 (Central Daylight Time)"

我期待相同的结果,但为什么它们不同?

2 个答案:

答案 0 :(得分:2)

我认为区别在于如何解析该值。

new Date('05-20-2015').toString();//parse the date using local time zone
new Date('2015-05-20').toString();//parses date as if it is in GMT

正如您所看到的,给定值之间存在5小时的差异

Date.parse()

  

给定表示时间的字符串,parse()返回时间值。它   接受RFC2822 / IETF日期语法(RFC2822第3.3节),例如   "星期一,1995年12月25日13:30:00 GMT"。它了解美国大陆   时区缩写,但对于一般用途,使用时区偏移,   例如,"星期一,1995年12月25日13:30:00 + 0430" (4小时30分钟   格林威治子午线以东)。如果未指定时区,则   字符串采用ES5识别的ISO格式,假设为UTC。格林威治标准时间   和UTC被认为是等价的。本地时区用于   解释RFC2822第3.3节格式的参数(或任何格式不   在ES5中被认可为不包含时区的ISO 8601   信息。

此处2015-05-20位于ISO8601 format,因此使用UTC时区进行处理。

如果您想要相同的结果,可以传递时区,如new Date('2015-05-20 GMT-0500')

答案 1 :(得分:1)

ISO格式(前YYYY-MM-DD是简称)将被视为UTC时区。

其他日期字符串将被视为本地时区。

MDN source

相关

手动设置时区

var d1 = new Date('05-20-2015'); // local timezone

var d2 = new Date('2015-05-20'); // UTC timezone
d2.setUTCMinutes(d2.getTimezoneOffset()); // need to set to local timezone

console.log(d1.toString() === d2.toString()); // true