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

时间:2013-05-31 12:12:22

标签: 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

我希望它能回归:     五     6     7

但它输出:     6     6     7

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

度过愉快的一天,

1 个答案:

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

发生了什么事?

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

Date {Fri May 31 2013 14:20:32 GMT+0200}

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

Date {Mon Jul 01 2013 14:21:28 GMT+0200}

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

所以最后解决方案只是以这种方式改变设置值的顺序,不会发生这种“溢出”或直接使用带有相应参数的constructor

new Date( 2013, 5, 6 );