2011-03-22 39 views
3

我完全困惑,爲什麼這不起作用?Javascript setHours(1)不適用於Mar 27 2011 01:00:00 GMT + 0100

我重複了一個日期範圍,只是一步一步地添加。這工作得很好,直到本週。基本上直到日期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相同的錯誤。

回答

5

導致此行爲的夏令時。 3月27日是夏令時開始的日子。

編輯:

希望這能解決你的問題:Daylight Saving in JavaScript

+0

有時它被稱爲「夏令時」。事情轉換的日期因國家而異(或者甚至在更細微的政治粒度上)。 – Pointy 2011-03-22 12:34:09

+0

啊哈,好的。我該怎麼做呢?如果可能,我想保留增量計數器。 – Remy 2011-03-22 12:40:21

+0

感謝您的編輯。我想我可以在每個循環中檢查夏令時。但希望找到更簡單的東西。 – Remy 2011-03-22 14:27:24

2

只是一個猜測:難道是與日光節約時間?

1

我得到了同樣的問題,因爲你和

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

解決它,我不知道,如果創建一個新的Date對象是一個好主意,但它爲我工作。

2

我知道這個問題是很老,但以防萬一別人打這個問題,使用UTC方法就可以避免此行爲:

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