Chrome javascript日期错误在2013年6月6日完全正确

Rom*_*ain 3 javascript google-chrome date

我正在使用javascript Date对象将字段值转换为时间戳,同一段代码可以工作几年,但今天我有一个奇怪的行为,标题中有日期.

它可以通过以下代码汇总:

// 06 June 2013
DateTemp = new Date();
DateTemp.setFullYear( 2013 );
DateTemp.setMonth( 5 );
DateTemp.setDate( 6 );
DateTemp.setHours( 0 );
DateTemp.setMinutes( 0 );
DateTemp.setSeconds( 0 );
console.log( DateTemp.getMonth() ); // 5

DateTemp.setMonth( 6 );
console.log( DateTemp.getMonth() ); // 6

DateTemp.setMonth( 7 );
console.log( DateTemp.getMonth() ); // 7
Run Code Online (Sandbox Code Playgroud)

我希望它能回归:5 6 7

但它输出:6 6 7

因此,如果用户在字段中输入此日期,它会在一个月后存储日期...如果有人可以解释我在哪里搞砸了,请提前感谢您.

祝你今天愉快,

Sir*_*rko 8

交换线条,您可以使用设置月份的日期设置日期:

DateTemp = new Date();
DateTemp.setFullYear( 2013 );
DateTemp.setDate( 6 );
DateTemp.setMonth( 5 );
DateTemp.setHours( 0 );
DateTemp.setMinutes( 0 );
DateTemp.setSeconds( 0 );
console.log( DateTemp.getMonth() ); // 5

DateTemp.setMonth( 6 );
console.log( DateTemp.getMonth() ); // 6

DateTemp.setMonth( 7 );
console.log( DateTemp.getMonth() ); // 7
Run Code Online (Sandbox Code Playgroud)

怎么了?

如果使用构造new Date()函数,则会创建具有当前日期的新Date对象.所以今天这将是这样的:

Date {Fri May 31 2013 14:20:32 GMT+0200}
Run Code Online (Sandbox Code Playgroud)

在您的代码中,您首先会将月份更改为6月份.但是没有6月31日,这是由JavaScript以这种方式处理的,它被转换为

Date {Mon Jul 01 2013 14:21:28 GMT+0200}
Run Code Online (Sandbox Code Playgroud)

然后你设置一天和所有其他部分,这只是工作正常.但最终看来你还有一个月的时间.

所以最后解决方案只是以这种方式更改设置值的顺序,不会发生这种"溢出"或直接使用带有相应参数的构造函数:

new Date( 2013, 5, 6 );
Run Code Online (Sandbox Code Playgroud)