使用类似参数调用时,日期构造函数会提供意外结果

时间:2014-10-16 22:20:07

标签: javascript date

我在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对象如此不同?

1 个答案:

答案 0 :(得分: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');