2015-05-21 44 views
4

这里是我的调试代码:JavaScript日期:为什么这两个日期不同?

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

我的浏览器(Firefox)说第一个“无效日期”。你正在使用哪种浏览器? –

+0

@GregHewgill有趣的是,Firefox的说,这是对我无效,以及(尽管我在美国,这种格式是不幸的规范)。 Chrome很好用。 – ajp15243

+0

@GregHewgill这将取决于使用的语言环境/时区....对我来说这是工作 –

回答

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

+0

嗯,它没有任何意义,因为我相信一些国家也使用'YYYY-MM-DD'作为本地格式。 – newman

+0

@miliu你将不得不手动设置时区 –

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()

给定一个表示时间的字符串,解析(之差)返回的时间价值。它 接受RFC2822/IETF日期语法(RFC2822第3.3节),例如 “星期一,1995年12月25日13:30:00 GMT”。据了解美国大陆 时区的缩写,但对于一般的使用,使用时区偏移量, 例如,“周一,1995年12月25日13时三十○分00秒0430”(4小时30分钟 东格林威治子午线)。如果未指定时区,并且该字符串采用ES5可识别的ISO格式,则假定为UTC。 GMT 和UTC被认为是等同的。本地时区是用来 在RFC2822章节解释变量3.3格式(或ES5认定为ISO 8601的任何格式不 )不包含的时区 信息。

这里2015-05-20ISO8601 format,所以它是使用UTC时区处理的。

如果你愿意,你可以通过像new Date('2015-05-20 GMT-0500')

+0

@downvoter我是否错过任何东西 –