Ottieni l’abbreviazione del fuso orario usando il valore di offset

Usando moment.js (con fuso orario momento), voglio ottenere l’abbreviazione del fuso orario (ad es. PST) per la locale corrente.

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

Come ottengo l’abbreviazione del fuso orario? Tutti gli esempi che ho visto nei documenti e altrove scelgono una regione specifica come "America/New_York" .

Dai documenti, sembra che posso ottenere le informazioni zone.abbr(timestamp) Zone con zone.abbr(timestamp) ma non sono sicuro di come accedere all’object zona.

JSFiddle

Il titolo e la domanda sono diversi. Nel titolo, chiedi come ottenerlo usando l’offset, il che non sarebbe ansible. Esistono molti fusi orari che condividono lo stesso offset, pertanto non è ansible distinguere un’abbreviazione del fuso orario da un offset.

Ma nella domanda, hai chiesto come ottenere l’abbreviazione per la locale corrente, per un timestamp specifico.

Il problema generale è che non esiste un modo completamente affidabile per rilevare il fuso orario corrente. Questo è discusso in questa risposta . Quindi la zona del fuso orario non può determinare in modo deterministico quale fuso orario deve essere caricato di default.

Ci sono alcune altre opzioni disponibili però.

  • In alcuni browser, le estensioni API di internazionalizzazione ECMAScript sono supportate nella funzione toLocaleString dell’object Date . Se supportato, puoi farlo (senza attimi):

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

    Nei browser supportati, otterrai un valore come “EST”. Si potrebbe voler fare una sorta di test però, perché non funzionerà in tutti i browser.

  • Potresti usare uno script come jsTimeZoneDetect per indovinare al fuso orario locale. Di solito è corretto, ma non è garantito. Potresti quindi passare quel valore alla zona temporale.

     var tzName = jstz.determine().name(); var m = moment(); var abbr = m.tz(tzName).zoneAbbr(); // or .format('z') 
  • È ora disponibile anche il supporto integrato per il rilevamento / individuazione del fuso orario nella zona temporale:

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

L’ultima build di moment.js ti darà l’ipotesi del fuso orario: PR # 220 per esempio: moment.tz.guess(); will result in 'America/New_York' moment.tz.guess(); will result in 'America/New_York'