使用类似的参数调用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对象如此不同?


由于没有提供时区偏移量,第一个日期被视为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');
链接地址: http://www.djcxy.com/p/3075.html

上一篇: Date constructors provide unexpected results when called with similar arguments

下一篇: Parse date without timezone javascript