FireFox 34 setMinutes日期方法有一种奇怪的行为,用于设置2008年1月1日23小时00分00秒的60分钟.预计会增加一天,但事实并非如此.
var initDate = [2008,1]; var d = new Date(initDate[0],initDate[1],initDate[2]); document.body.innerHTML += d + "<br/>"; d.setHours(23); d.setMinutes(60); document.body.innerHTML += d + "<br/>";
FireFox 34的结果是:
Tue Jan 01 2008 00:00:00 GMT+0300 (Russia TZ 2 Standard Time) Tue Jan 01 2008 23:00:00 GMT+0300 (Russia TZ 2 Standard Time)
而不是Chrome 39.0.2171.71米:
Tue Jan 01 2008 00:00:00 GMT+0300 (Russia TZ 2 Standard Time) Wed Jan 02 2008 01:00:00 GMT+0400 (Russia TZ 2 Daylight Time)
如果我将年份改为2006年,结果还可以:
Sun Jan 01 2006 00:00:00 GMT+0300 (Russia TZ 2 Standard Time) Mon Jan 02 2006 00:00:00 GMT+0300 (Russia TZ 2 Standard Time)
http://jsfiddle.net/7dp8xvf8/1/
这是一个错误吗?
更新:IE 8和9具有相同的行为,但10-11是可以的.
解决方法
鉴于
specification,我认为这确实是预期的行为.特别注意,MakeTime function不包含溢出检查(即,它不确定分钟数是否小于60). MakeDate函数的行为类似;因此,Firefox实际上正确地遵循了规范.