2015-11-13 7 views
8

Ich möchte den Zeitzonenunterschied zwischen New York und Hong Kong mit Node.js Moment-Modul bekommen. Ich habe einige Vorarbeiten geleistet.Get Zeitzone Unterschied in Stunden mit Moment

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

I kann dann fortfahren, eine Funktion zu schreiben, die Differenz zwischen den Zeitzonen in 2 Stunden zu berechnen. Ich habe auf eine einfachere Methode gehofft.

Gibt es einen eleganteren und einfacheren Weg, dies mit der Momentenbibliothek zu tun?

Antwort

10

Nicht sicher „einfacher“, aber mehr richtig (da nicht alle Zeitzonen sind eine volle Stunde voneinander):

// 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 und als Antwort ausgewählt. Ich verstehe nicht ganz, warum die Notwendigkeit für 'var now = moment.utc();'? Warum nicht einfach 'NewYork_time_hr' Offset von' HongKong_time_hr' bekommen? – user781486

+4

Der Kommentar darüber war ein Hinweis - Zeitzone kompensiert das ganze Jahr über und [nicht alle gleichzeitig] (https://en.wikipedia.org/wiki/Daylight_saving_time_by_country). Der Unterschied zwischen Hong Kong (hat keine DST) und New York (hat DST) ist unterschiedlich, je nachdem, ob Sie im Sommer oder im Winter fragen. Und Sie können nicht einfach "hr" verwenden, weil z. Kalkutta ist um +05: 30 versetzt. – Amadan

+1

Große Antwort. Es funktioniert aber auch, wenn Sie 'moment()' anstelle von 'moment.utc()' übergeben. Es wird immer noch als derselbe UTC-basierte Zeitstempel ausgewertet, unabhängig davon, welche Form Sie übergeben. +1 über das Ergebnis ist unterschiedlich, je nachdem, wann Sie es aufrufen. "Wie viele Stunden zwischen New York und Los Angeles?" (Normalerweise 3, aber manchmal 2 und manchmal 4.) –