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

bad*_*oom 8 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);
Run Code Online (Sandbox Code Playgroud)

结果:

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

Jef*_*ata 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');
Run Code Online (Sandbox Code Playgroud)

结果:

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) 
Run Code Online (Sandbox Code Playgroud)

我不确定exp2你的情况,但怀疑这与夏令时有关,并且你居住在不遵守夏令时的地区(亚利桑那州?)。

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

var exp4 = new Date('2014-10-17T00:00-05:00');
Run Code Online (Sandbox Code Playgroud)