2012-10-03 15 views
5

我注意到了一些與時區和Javascript Date對象有點奇怪的東西。有沒有辦法在Javascript Date對象中表示2012年10月21日的對象?

在Linux機器上嘗試這樣的:

$ TZ='America/Sao_Paulo' js 
js> new Date(2012, 9, 21, 0, 0, 0).toString() 
"Sat Oct 20 2012 23:00:00 GMT-0300 (BRST)" 

我發現它不可能獲得代表2012年十月的每一個attemps當天Date 01:00 00:00拿到的第21屆對象導致在前一天的晚上11點到00點之間的日期。

(Windows用戶可能會改變他們的時區巴西利亞/ GMT-03遇到相同的行爲)

增加1小時(一天),以這樣的日期對象的結果取回同日

我想它與在巴西的那個特定日期發生的夏令時有關,但我絕對不知道該如何處理。

我有一個循環,在一個月的日子迭代(對於日曆應用程序),它顯然永遠在這種情況下,達到月20日,當循環2012

一定有什麼東西我做錯了,但我不知道如何處理這種情況,因爲我猜它也可能發生在其他時區。

在Javascript中處理Date的建議方法是什麼?以確保不會出現這樣的時區/夏令時相關問題?

回答

0

這是絕對正確的行爲。由於夏令時午夜在巴西當地時間10月21日根本不存在。如果您只需製作日曆,則只需使用new Date(2012, 9, 21, 0, 0, 0).toUTCString()而不是new Date(2012, 9, 21, 0, 0, 0).toString()和其他UTC methods

例如,要創建UTC日期,您可以使用new Date(Date.UTC(2012, 9, 21, 0, 0, 0));

+0

感謝您的回答。然而,我的問題是沒有得到日期的字符串表示形式,而是得到一個代表這個確切時刻的有效對象。 – ereOn

+1

然後只需使用UTC方法:'new Date(Date.UTC(2012,9,21,0,0,0));' – bjornd

+0

確實效果更好。你能否編輯你的答案,使其更明顯真正的解決方案是什麼?我會很高興接受它然後:) – ereOn

相關問題