Получить разницу в часовых поясах в часах с помощью moment

#javascript #momentjs

#javascript #node.js #Часовой пояс #momentjs #смещение часового пояса

Вопрос:

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

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

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

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

Ответ №1:

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

 // 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>  

Комментарии:

1. Поддержано и выбрано в качестве ответа. Я не совсем понимаю, зачем это нужно var now = moment.utc(); ? Почему бы просто не получить NewYork_time_hr смещение HongKong_time_hr ?

2. Комментарий выше был подсказкой — смещения часовых поясов меняются в течение года, а не все одновременно . Разница между Гонконгом (без летнего времени) и Нью-Йорком (с летним временем) различается в зависимости от того, спрашиваете ли вы летом или зимой. И вы не можете просто использовать hr , потому что, например, Калькутта смещена на 05:30.

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

4. К вашему сведению, другой способ получить смещение — это moment(now).tz("America/New_York").utcOffset() , но в любом случае все в порядке. Вам все равно придется вычесть их вручную.