2015-11-13 5 views
8

Я хотел бы получить разницу во времени между Нью-Йорком и Гонконгом с модным модулем Node.js. Я сделал предварительную работу.Получить разницу во времени в часах с моментом

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

Затем я могу написать функцию для вычисления разницы между двумя часовыми часами в часах. Я надеялся на более простой метод.

Есть ли более элегантный и простой способ сделать это с помощью библиотеки минут?

ответ

10

Не уверен, что «проще», но более правильно (так как не все часовые пояса являются полный час друг от друга):

// 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 и выбран в качестве ответа. Я не совсем понимаю, зачем нужна «var now = moment.utc();'? Почему бы просто не получить 'NewYork_time_hr' смещение' HongKong_time_hr'? – user781486

+4

Комментарий выше, это было изменение смещения по часовой стрелке в течение года, и [не все в одно и то же время] (https://en.wikipedia.org/wiki/Daylight_saving_time_by_country). Разница между Гонконгом (не имеет DST) и Нью-Йорком (имеет DST) отличается в зависимости от того, спрашиваете вы летом или зимой. И вы не можете просто использовать 'hr', потому что, например, Калькутта смещается на +05: 30. – Amadan

+1

Отличный ответ. Хотя он также будет работать, если вы просто передадите 'moment()' вместо 'moment.utc()'. Он по-прежнему оценивается как одна и та же временная метка на основе UTC, независимо от того, какую форму вы проходите. +1 о том, что результат отличается в зависимости от того, когда вы его вызываете. «Сколько часов между Нью-Йорком и Лос-Анджелесом?» (Обычно 3, но иногда 2, а иногда 4.) –

Смежные вопросы