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

Kai*_*Kai 3 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);
Run Code Online (Sandbox Code Playgroud)

这是Firefox中的结果:

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

当date的值为28时:

28
1
Tue Feb 28 2012 11:00:00 GMT + 1100(AUS东部标准时间)

没有星期三!

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

Nie*_*sol 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)应该正常工作.