2010-10-25 115 views
4

我看到一些行爲,我不明白Javascript日期對象和DST轉換。如果我執行在Chrome的JavaScript控制檯以下Javascript日期對象和夏令時

var date = new Date(1268535600000); //2010-03-14T03:00:00.000Z (21:00 03-13 America/Chicago) 
for(var i = 1; i <= 12; i++) 
{ 
    var time = date.getHours(); 
    console.log(time) 
    console.log(date) 
    date.setHours(date.getHours() + 1);   
} 

輸出爲:

21 
Sat Mar 13 2010 21:00:00 GMT-0600 (Central Standard Time) 
22 
Sat Mar 13 2010 22:00:00 GMT-0600 (Central Standard Time) 
23 
Sat Mar 13 2010 23:00:00 GMT-0600 (Central Standard Time) 
0 
Sun Mar 14 2010 00:00:00 GMT-0600 (Central Standard Time) 
1 
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time) 
1 
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time) 
1 
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time) 
1 
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time) 
1 
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time) 
1 
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time) 
1 
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time) 
1 
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time) 

然而,改變的for循環的最後一行

date = new Date(date.getTime() + 3600000) 

產生輸出I」 d期望在轉換時跳過小時:

21 
Sat Mar 13 2010 21:00:00 GMT-0600 (Central Standard Time) 
22 
Sat Mar 13 2010 22:00:00 GMT-0600 (Central Standard Time) 
23 
Sat Mar 13 2010 23:00:00 GMT-0600 (Central Standard Time) 
0 
Sun Mar 14 2010 00:00:00 GMT-0600 (Central Standard Time) 
1 
Sun Mar 14 2010 01:00:00 GMT-0600 (Central Standard Time) 
3 
Sun Mar 14 2010 03:00:00 GMT-0500 (Central Daylight Time) 
4 
Sun Mar 14 2010 04:00:00 GMT-0500 (Central Daylight Time) 
5 
Sun Mar 14 2010 05:00:00 GMT-0500 (Central Daylight Time) 
6 
Sun Mar 14 2010 06:00:00 GMT-0500 (Central Daylight Time) 
7 
Sun Mar 14 2010 07:00:00 GMT-0500 (Central Daylight Time) 
8 
Sun Mar 14 2010 08:00:00 GMT-0500 (Central Daylight Time) 
9 
Sun Mar 14 2010 09:00:00 GMT-0500 (Central Daylight Time) 

第一種方法不起作用的原因是什麼?

編輯: 此外,用它似乎只是忽略複製小時與第一種方法複製的小時DST過渡: 的另一件事是,如果我嘗試用一​​個重複小時DST過渡,它只是似乎忽略重複的小時:

Sun Nov 07 2010 00:00:00 GMT-0500 (Central Daylight Time) 
Sun Nov 07 2010 01:00:00 GMT-0600 (Central Standard Time) 
Sun Nov 07 2010 02:00:00 GMT-0600 (Central Standard Time) 

但它正確處理重複小時的第二種方法。

回答

1

也許這是一個錯誤。你是否在多個瀏覽器上嘗試過它?

否則我會猜測,因爲您試圖將小時設置爲不存在的時間,它會拒絕更改。

+0

是的,我在Firefox中使用Firebug作爲控制檯時得到了相同的行爲。 – 2010-10-25 20:49:02

+0

我不確定是否僅僅是由於無效的時間,因爲還有一些奇怪的與DST轉換重複一小時(我更新了這個案例的問題) – 2010-10-25 20:52:32

+0

@你的新案件不會改變我的答案在所有。秋季過渡不包含任何無效時間,它只需加倍一個小時:01:00至01:59發生兩次。有趣的是,它選擇CST而不是保留CDT的先前值,但兩種答案都是正確的。對於Spring轉換,02:00到02:59不存在,因此在該時間間隔內設置時間將是一個錯誤。 – 2010-10-25 21:34:44