2016-02-25 33 views
-1

我知道JavaScript Date對象包含getTimezoneOffset()獲取偏移量,但有沒有任何方法可以返回該時區的標籤或name在JavaScript中獲取時區標籤

例如,我的電腦上,在Chrome的控制檯,如果我這樣做:

> new Date().toString(); 

然後我得到:

< "Thu Feb 25 2016 08:49:56 GMT-0800 (Pacific Standard Time)" 

我希望做的是採取Date並獲得回到"Pacific Standard Time"部分吧。

這是可能的,如果是這樣,如何?

回答

0

你可以使用正則表達式來得到它:

var d = new Date().toString(); 
var timezone = d.match(/\(([^)]+)\)/)[1]; 
+0

這假定* Date.prototype.toString *以特定格式返回值。但是,它完全依賴於實現,字符串可能根本不包含任何時區,如果是,則格式不匹配正則表達式。所以不能肯定它會起作用。 – RobG

+0

感謝您指出這一點,我認爲輸出是標準化的。在所有現代瀏覽器(Chrome,FF,Safari,Opera和IE 11)和node.js中,輸出看起來都是一致的。 – nils

1

我不認爲有沒有正則表達式匹配的可靠方法(見@nils答案)。不知道那個日期字符串有什麼警告,所以可能是脆弱的?它看起來像有一些可用的庫,可以簡化這個

https://bitbucket.org/pellepim/jstimezonedetect/wiki/Home

var timezone = jstz.determine(); 
timezone.name(); 
"Europe/Berlin" 
+1

這是唯一合理可靠的方法。這些庫測試當前時區偏移量,並且有時會在常見夏令時邊界的任一側進行測試。這兩者可以準確檢測[* IANA時區*](https://www.iana.org/time-zones)。然而,歷史日期的準確性是可疑的,因爲JavaScript只考慮當前設置,就好像它們總是存在一樣。 – RobG

0

有沒有直接的方法。您可以通過以下方法獲取它。

或者,您可以選擇REGEX

function getTimeZoneLabel(){ 
    var str = new Date().toString(); 
    return str.substring(str.indexOf("(")+1,str.indexOf(")")); 
} 
0

一種方法是隻是得到什麼是paranteses。 Juan Mendes posted a solution

function getTimeZone() { 
    return /\((.*)\)/.exec(new Date().toString())[1]; 
} 

getTimeZone(); 

注意,這是語言,操作系統和瀏覽器特定的(而且爲此當然不是理想的解決方案)。 如果您可以使用圖書館,您可以使用jsTimezoneDetect