JavaScript setDate返回错误的日期

时间:2011-03-31 09:18:39

标签: javascript date

我从字符串中获取日期,解析它以获取日,月和年组成者并使用它们来实例化Date对象。

我想要达到的目的是将日期增加一天。 一切正常,只是setDate方法坚持有时会返回无效日期......

例如,如果我在2011年2月28日添加1天,它将在2011年2月29日返回...实际上不存在的日期。

这是JavaScript的原生日期/时间API的错误/限制,还是我只是做错了什么?我发现如果不检查日期的有效性就很难相信它的行为方式。

 var myDate = new Date(2011, 2, 28);
 alert(myDate);
 myDate.setDate(myDate.getDate() + 1);
 alert(myDate); // 29 February 2011 !

感谢。

3 个答案:

答案 0 :(得分:10)

你不是二月 - 月#2是三月

JS月份基于0

 var myDate = new Date(2011, 1, 28); // 28th of Feb
 alert(myDate);
 myDate.setDate(myDate.getDate() + 1);
 alert(myDate); // 1st of March 2011 !

PS:如果您使用var d = new Date()创建日期,并且之后d.setHours(0,0,0,0)之前没有规范小时,那么您在夏令时间可能会遇到一些问题

答案 1 :(得分:1)

不,你正在使用March,不是吗? 3月29日存在。

var myDate = new Date(2011, 1, 28); // 28th of february

答案 2 :(得分:1)

你忘了,它从0开始数月。 var myDate = new Date(2011,2,28); 实际上是 2011年3月28日星期一00:00:00 GMT + 0300(FLE白天时间){}

尝试

 var myDate = new Date(2011, 1, 28);
 alert(myDate);
 myDate.setDate(myDate.getDate() + 1);
 alert(myDate); // 1 Mar 2011 !