Javascript setHours(1)不适用于2011年3月27日01:00:00 GMT + 0100

时间:2011-03-22 12:26:37

标签: javascript date

我完全不知道为什么这不起作用?

我正在迭代日期范围,只需逐步添加1小时。直到本周,这个工作正常。基本上直到日期为2011年3月27日01:00:00 GMT + 0100。然后它只是卡住而不添加任何东西。如果我加+ 3h然后再次使用,但不能+1。

我在Firefox上使用Firebug,并在控制台中尝试过。

Sun Mar 27 2011 01:00:00 GMT+0100

>>> this.setHours(0);
1301180400000
>>> this.setHours(1);
1301184000000
>>> this.setHours(2);
1301184000000
>>> this.setHours(3);
1301187600000

这是代码:

Date.prototype.addHours = function (h) {
    this.setHours(this.getHours() + h);
    return this;
}

我在Safari和Chrome中遇到了同样的错误。

4 个答案:

答案 0 :(得分:5)

夏令时导致此行为。 3月27日是夏令时开始的日子。

编辑:

希望这可以解决您的问题:Daylight Saving in JavaScript

答案 1 :(得分:2)

只是一个猜测:它可能与夏令时有关吗?

答案 2 :(得分:2)

我知道这个问题已经很老了,但是为了防止其他人遇到这个问题,使用UTC方法可以避免这种行为:

Date.prototype.addHours = function (h) {
    this.setUTCHours(this.getUTCHours() + h);
    return this;
}

答案 3 :(得分:1)

我遇到了和你一样的问题并用

解决了
Date.prototype.addHours = function (h) {
    this = new Date(this.getTime() + h*3600000);
    return this;
}

我不确定创建一个新的Date对象是否是一个好主意,但它对我有用。