#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()
, но в любом случае все в порядке. Вам все равно придется вычесть их вручную.