【发布时间】:2026-02-14 13:10:01
【问题描述】:
FireFox 34 setMinutes 日期方法有一个奇怪的行为,将 60 分钟设置为 2008 年 1 月 1 日 23 时 00 分 00 秒。预计天数会增加,但事实并非如此。
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 没问题。
【问题讨论】:
-
很明显,Chrome 改变了时区,而 FireFox 没有;我假设您自己也在那个位置,当时有什么重大变化吗?在那个日期前后,我无法在网上找到任何东西。
-
如果您的
setMinutes小于60,您会看到什么行为? (例如,d.setMinutes(58);会产生什么?)如果不更改浏览器的时区/位置,我认为我无法测试您的脚本。 -
@AdrianWragg 我在那个位置,但在上次 FireFox 更新之前,问题还没有出现。
-
@apsillers 结果:“Sun Jan 01 2006 23:58:00 GMT+0300 (Russia TZ 2 Standard Time)”
-
@Haketo,ES 5.1 spec 同意 El Gans,6.0 draft 也是如此。这可能确实是 Firefox 34 中的一个错误。
标签: javascript date firefox time