Javascript Date()将2012年2月29日转换为2012年3月1日

时间:2014-03-05 13:26:31

标签: javascript time

这是我的代码:

var d = new Date();
var date = 29;
var month = 1; // Feb
var year = 2012; // Bissextile year
d.setUTCDate(date);
d.setUTCMonth(month);
d.setUTCFullYear(year);
d.setUTCHours(0);
d.setUTCMinutes(0);
d.setUTCSeconds(0);
document.write(d.getUTCDate()+"<br />"+d.getUTCMonth()+"<br />"+d);

这是Firefox中的结果:

1
2
Thu Mar 01 2012 11:00:00 GMT + 1100(AUS东部标准时间)

当date的值为28时:

28
1
2012年2月28日星期二11:00:00 GMT + 1100(澳大利亚东部标准时间)

没有星期三!

这是JS的错误还是有另一种方法可以找到2012年2月29日星期三?

1 个答案:

答案 0 :(得分:8)

问题在于您设置项目的顺序。

您从今天开始,即2014年3月5日。

然后您将日期设置为29.结果:2014年3月29日。

然后你将月份设置为1.结果:2014年2月29日。哦等等,这是错误的,因为2014年不是闰年,因此JS将其更正为2014年3月1日。

最后,你设定年份。最终结果是2012年3月1日。

尝试先设置年份,然后设置日期,然后设置月份。

或者,正确使用构造函数:new Date(2012,1,29)应该可以正常工作。