2014-10-16 31 views
8

我有一个奇怪的问题,Date对象初始化。并想知道如果有人可以解释为什么..当用相似的参数调用日期构造函数时会提供意想不到的结果

var exp1 = new Date('2014-10-17'); 
var exp2 = new Date(2014,9,17); 
var exp3 = new Date('17 Oct 2014'); 
console.log(exp1); 
console.log(exp2); 
console.log(exp3); 

结果:

 
Thu Oct 16 2014 18:00:00 GMT-0600 (MDT) // 16th? 
Fri Oct 17 2014 00:00:00 GMT-0700 (MST) // Why GMT -7 
Fri Oct 17 2014 00:00:00 GMT-0600 (MDT) // The only one that works as expected 

为什么这三个Date对象如此不同?

+0

您是否真的在第9次写入第二个电话?或者是一个应该是10的错字? – mdewitt 2014-10-16 22:37:29

+0

@badaboom您正在使用哪种浏览器? – 2014-10-16 22:39:02

+2

@mdewitt月份值以0开头:“整数值表示月份,从1月份的0开始到12月份的11月份”。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date – 2014-10-16 22:39:55

回答

2

第一个日期被视为GMT,因为没有提供时区偏移量。注销时,它会显示当地时区的时间。添加一个偏移量(下面的exp4),我得到预期的日期。

var exp1 = new Date('2014-10-17'); 
var exp2 = new Date(2014,9,17); 
var exp3 = new Date('17 Oct 2014'); 
var exp4 = new Date('2014-10-17z-0500'); 

结果:

Thu Oct 16 2014 19:00:00 GMT-0500 (Central Daylight Time) 
Fri Oct 17 2014 00:00:00 GMT-0500 (Central Daylight Time) 
Fri Oct 17 2014 00:00:00 GMT-0500 (Central Daylight Time) 
Fri Oct 17 2014 00:00:00 GMT-0500 (Central Daylight Time) 

我不知道exp2你,但怀疑它是与日光节约时间和你住在一个不遵守夏令时(区域亚利桑那?)。

编辑:这似乎是浏览器特定的。上述结果是在Chrome中生成的,而在IE 11中,exp4是无效日期。对于IE 11,我必须使用这种格式:

var exp4 = new Date('2014-10-17T00:00-05:00'); 
+0

谢谢你的回答。时区偏移..也许你是对的。没想过。但无论如何exp1和exp3让我困惑。为什么在第一种情况下指向GMT,但在第二种情况下,它工作正常?非常意外的功能.. – badaboom 2014-10-17 15:47:01

+0

@badaboom是的,exp1和exp3之间的区别是意外的。我没有看到任何文档来解释它,所以在这一点上我相信这取决于浏览器中的实现,并且它们在解析时以不同的方式处理2个字符串。 – 2014-10-17 16:19:35

+0

好的,谢谢。但我认为不涉及到浏览器的实现,可能是JS中的东西..在所有最新的浏览器中测试过 – badaboom 2014-10-17 16:51:29

相关问题