2015-11-13 20 views
8

Vorrei ottenere la differenza di fuso orario tra New York e Hong Kong con il modulo momento Node.js. Ho fatto un lavoro preliminare.Ottiene la differenza del fuso orario in ore con il momento

var NewYork_time_hr = moment().tz("America/New_York").format('HH'); 
var HongKong_time_hr = moment().tz("Asia/Hong_Kong").format('HH'); 

Posso quindi procedere a scrivere una funzione per calcolare la differenza tra i 2 fusi orari in ore. Speravo in un metodo più semplice.

C'è un modo più elegante e più semplice per farlo con la libreria di momenti?

risposta

10

Non sono sicuro di "semplice", ma più corretto (dal momento che non tutti i fusi orari sono un'ora intera gli uni dagli altri):

// get the current time so we know which offset to take (DST is such bullkitten) 
 
var now = moment.utc(); 
 
// get the zone offsets for this time, in minutes 
 
var NewYork_tz_offset = moment.tz.zone("America/New_York").offset(now); 
 
var HongKong_tz_offset = moment.tz.zone("Asia/Hong_Kong").offset(now); 
 
// calculate the difference in hours 
 
console.log((NewYork_tz_offset - HongKong_tz_offset)/60);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.4.1/moment-timezone-with-data-2010-2020.min.js"></script>

+0

upvoted e selezionato come risposta. Non capisco perché la necessità di 'var now = moment.utc();'? Perché non ottenere l'offset di 'NewYork_time_hr' di' HongKong_time_hr'? – user781486

+4

Il commento sopra era un suggerimento: le variazioni di fuso orario cambiano durante l'anno e [non tutte allo stesso tempo] (https://en.wikipedia.org/wiki/Daylight_saving_time_by_country). La differenza tra Hong Kong (non ha DST) e New York (ha DST) è diversa a seconda che tu lo chieda in estate o in inverno. E non puoi semplicemente usare "hr" perché, ad es. Calcutta è compensato a +05: 30. – Amadan

+1

Ottima risposta. Anche se funzionerà anche se passi "momento()" invece di "momento.utc()". Viene ancora valutato come lo stesso timestamp basato su UTC indipendentemente dal modulo che si passa. +1 sul risultato è diverso a seconda di quando lo chiami. "Quante ore tra New York e Los Angeles?" (Di solito 3, ma a volte 2 e talvolta 4.) –