以下是我的调试器中的代码:
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)"
我期待相同的结果,但为什么它们不同?
答案 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小时的差异
给定表示时间的字符串,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时区。
其他日期字符串将被视为本地时区。
相关
手动设置时区
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