2013-05-01 56 views
1

我已經設置了UTC的最後期限,如下所示,我想知道在用戶的本地機器上,toLocaleString()方法會對它做些什麼。例如,如果它們處於識別它的時區,它是否會考慮日光節約?或者我需要插入額外的代碼來檢查用戶的位置,然後修復顯示的時間?Javascript日期toDocaleString帳戶的DST?

http://javascript.about.com/library/bldst.htm

var deadline = new Date('5/1/2013 ' + "16:15" + ' UTC'); 
alert(deadline.toLocaleString()); 

回答

2

我們不知道到底該toLocaleString方法做什麼(§15.9.5.5):

此函數返回一個字符串值。字符串的內容是 實現相關的,而是旨在代表日期在 當前時區以方便的,人類可讀的形式 對應宿主環境的當前 區域設置的約定。

但是,大多數實現會考慮DST是否在當前本地時區處於活動狀態。爲了您的例子中,我越來越"Mittwoch, 1. Mai 2013 18:15:00「 - CEST

我需要插入,檢查用戶所在,然後解決所顯示的時間額外的代碼

我覺得你可以信任? toLocaleString - 。瀏覽器應該尊重用戶的設置,如果你想要做手工,檢查出timezone.js

2

當您使用「UTC」日期本身將是UTC格式,但toLocaleString()需要客戶端的語言環境考慮在內,這意味着它會在字符串所有和更新一次返回日期客戶區域和區域設置(DST,日期/時間格式等)的典型變化。
正如JS文檔所描述的:「toLocaleString()方法使用語言環境設置將Date對象轉換爲字符串。」
如果您想避免這種情況,請改爲使用toUTCString()方法。

我還建議閱讀Javascript dates: what is the best way to deal with Daylight Savings Time?這個問題的接受的解決方案,以避免(至少,試圖避免)與JS,瀏覽器和區域設置有關的未來問題。

希望這有助於!

1

在一般情況下,答案是肯定的的JavaScript將在適當的代表UTC值。本地時間基於正在運行的計算機的時區設置。這包括調整DST。但是,正如其他人所指出的,細節是特定於實現的。

如果你想要一個一致的輸出,我會使用一個庫來格式化你的日期,而不是依賴於默認的實現。最好的圖書館(恕我直言)這是moment.js。他們主頁上的實況示例將讓您瞭解它可以做什麼。

UPDATE

如果你逝去,你想轉換爲正確的本地時間UTC值,到時候落入一個時期,時區規則比當前的不同 - 然後將結果無效。這很瘋狂,但是確實如此 - 並且通過ECMA規範中的設計。閱讀 - JavaScript Time Zone is wrong for past Daylight Saving Time transition rules

+0

太棒了,謝謝。看起來像我見過的這種類型的最佳圖書館 – Rob 2013-05-01 15:32:04

+0

moment.js如何處理不同的時區? – Bergi 2013-05-01 19:13:39

+0

它尚未 - 尚未。 Javascript只能本地使用本地或UTC。您可以傳入不同的偏移量,但它們將在內部應用。您不能在出路上表示非本地,非utc偏移量。請參閱https://github.com/timrwood/moment/issues/611 – 2013-05-01 19:32:41