2017-09-27 93 views
0

我正在使用JavaScript API (new Date()).toString()爲客戶端檢測時區?但是,我發現不同的Windows客戶端將爲同一時區返回不同的時區名稱。例如,如果客戶端在GMT + 0100中,我們可以得到如下的時區名稱。JavaScript - Date toString將時區名稱作爲GMT返回夏令時

Mon Sep 25 2017 21:04:22 GMT+0100 (GMT Summer Time)

Mon Sep 25 2017 21:04:22 GMT+0100 (GMT Daylight Time)

一個名稱中包含夏季和另一名包含日光。如何使此API返回像GMT Daylight Time那樣的相同時區名稱?

+2

Javascript日期API糟透了,你會從挫折中拋棄自己的建築。這裏使用[moment.js](https://momentjs.com)和他們的真棒[時區](https://momentjs.com/timezone/)庫。它會放棄混凝土。 – Darkrum

+0

@Darkrum感謝您的信息。我們現在使用[jsTimezoneDetect](https://bitbucket.org/pellepim/jstimezonedetect)來檢測它,但是它會檢測某些Daylight或非Engilsh操作系統鏡像的錯誤時區。你認爲它會支持這種情況嗎? – shengt

回答

1

如何使此API返回像GMT Daylight Time一樣的時區名稱?

你不行。 Date對象的ToString函數返回實現特定的值。理想情況下,它會在當前語言環境中顯示一個人類可讀的時區名稱,但實際上它可能只是關於任何事情,並且跨實現沒有一致性。

此外,這兩個名稱都不正確。英國夏令時唯一正確的英文名稱是「英國夏令時」。

但是,如果你的目標是完全支持ECMA國際化API只是新環境(ECMA-402),那麼你可以使用ToLocaleString功能,像這樣:

new Date().toLocaleString('en-GB', { timeZone: 'Europe/London', timeZoneName: 'long' }) 
//=> "27/09/2017, 06:00:20 British Summer Time" 

結果應該是一致的,當它可用時。請記住,這是一個相對較新的API,並未在舊版瀏覽器中實現。

+0

謝謝馬特。我們想找到一種方法來檢測當前用戶的客戶時區。您提供的API可用於時區已知的情況。你知道我們可以使用其他方式來檢測時區嗎? – shengt

+0

是的,這已被問及幾次回答。 [這是一個這樣的地方](https://stackoverflow.com/a/18252251/634824)。順便說一句,在將來嘗試避免[XY問題](https://meta.stackexchange.com/a/66378/201534)。 :) –