我使用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
因此,如果用户在字段中输入此日期,则会在一个月后存储日期... 如果有人能解释我在哪里搞砸了,请提前感谢你。
度过愉快的一天,
答案 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 );