FireFox 34 setMinutes BUG?

时间:2014-12-11 13:06:16

标签: javascript date firefox time

FireFox 34 setMinutes日期方法有一种奇怪的行为,用于设置2008年1月1日23小时00分00秒的60分钟。预计会增加一天,但事实并非如此。

var initDate = [2008, 0, 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 m:

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还可以。

2 个答案:

答案 0 :(得分:0)

鉴于specification,我认为这确实是预期的行为。特别注意,MakeTime function不包含溢出检查(即,它不确定分钟数是否小于60)。 MakeDate函数的行为类似;因此,Firefox实际上正确地遵循了规范。

答案 1 :(得分:0)

我在Firefox 39.0.3以及当前的开发版本(42a)中按预期工作,因为我得到了:

"Tue Jan 01 2008 00:00:00 GMT+0300 (MSK)"
"Wed Jan 02 2008 00:00:00 GMT+0300 (MSK)"

这也是ES规范要求的。

如果这仍然不适合你(这会令人惊讶),特别是如果你看到与时区相关的怪异,你还应该提到你的系统TZ设置。