2015-02-06 22 views
11

使用moment.js(帶時刻),我想獲取當前語言環境的時區縮寫(例如PST)。使用偏移值獲取時區縮寫

var now = Date.now(); // 1423254073931 
var zone = moment(now).zone(); // 480 
var timezone = 

如何獲取時區縮寫?我在文檔和其他地方看到的所有示例都選擇了一個特定區域,如"America/New_York"

從文檔看來,我可以通過Zone Objectzone.abbr(timestamp)獲取信息,但我不確定如何訪問區域對象。

JSFiddle

+0

而且你不能使用'/\(([[))+)\)/.exec(new Date())[1]'? – 2015-02-06 21:45:01

+0

@RobRaisch我不認爲這將跨瀏覽器工作。例如,這是Firefox中'new Date'的結果:'2015-02-06T23:40:57.085Z' – thetallweeks 2015-02-06 23:42:54

+0

實際上,'new Date()'的結果是FF出現的Date對象的新實例以非標準格式打印到控制檯。因此,而不是上述,你可以'/\(([[)]+)\)/.exec((new Date())。toString())[1]'這裏在波士頓,返回「東部標準時間「 – 2015-02-06 23:52:07

回答

25

標題,問題是不同的。在標題中,你問如何使用偏移量來獲得 - 這是不可能的。有許多時區共享相同的偏移量,因此無法單獨區分時差縮寫和偏移量。

但在問題中,您問了如何獲取當前語言環境的縮寫,針對特定的時間戳。

一般問題是,沒有完全可靠的方式來檢測當前時區。這在this answer中討論。所以時區時區不能確定地告訴哪個時區應該默認加載。

雖然有一些其他選項可用。

  • 在一些瀏覽器,ECMAScript Internationalization API延伸支撐在Date對象的toLocaleString功能。如果支持,就可以做到這一點(沒有片刻):

    var d = new Date(); // or whatever date you have 
    var tzName = d.toLocaleString('en', {timeZoneName:'short'}).split(' ').pop(); 
    

    在支持的瀏覽器,你會得到像「EST」的值。儘管你可能想做某種測試,因爲它不適用於所有的瀏覽器。

  • 你可以使用像jsTimeZoneDetect這樣的腳本來猜測當地時區。這是通常正確,但不能保證。然後,您可以將該值傳遞給時區 - 時區。

    var tzName = jstz.determine().name(); 
    var m = moment(); 
    var abbr = m.tz(tzName).zoneAbbr(); // or .format('z') 
    
  • 還有就是現在也內置支持時區的檢測/在moment-timezone猜測:

    var tzName = moment.tz.guess(); 
    var abbr = m.tz(tzName).zoneAbbr(); // or .format('z') 
    
+0

這是很好的知道。之前我曾認爲偏移量是獨一無二的,所以它可以用來獲取時區。 – thetallweeks 2015-02-10 18:58:14

+0

瞬時時區的最新版本也包含時區猜測。 – RonyK 2016-03-15 12:38:48

5

最新moment.js會給你時區的猜測編譯: PR#220 例如:moment.tz.guess(); will result in 'America/New_York'