2015-03-25 3 views
2

Например, разница в Восточном и Центральном составляет 1. Мое решение ниже кажется взломанным. Есть ли более простой/лучший способ?Как рассчитать разницу в 2 часовых поясах в JavaScript?

var diff = (parseInt(moment().tz("America/New_York").format("ZZ")) - parseInt(moment().tz("America/Chicago").format("ZZ")))/100; 

Мой пример: библиотека Momentjs.

+0

Что о вычитании [коррекций] (http://momentjs.com/timezone/docs/#/zone-object/offset/)? – CodingIntrigue

+0

так что-то вроде '(moment(). Tz (" America/New_York "). Zone() - moment(). Zone())/60'? Наверное, это немного лучше. – Homer

+0

Что именно вы планируете с этим делать? Вам действительно нужно использовать часовой пояс по имени? –

ответ

8

Невозможно рассчитать разницу между двумя произвольными часовыми поясами .. Вы можете рассчитать разницу на определенный момент времени.

  • Это настоящее разница 4 часа между Лондоном и Нью-Йорке (пишу это на 25 марта, 2015).
  • Но это было 5-часовое различие несколько недель назад, и это будет через 5 недель.
  • Каждый часовой пояс отключает переход на летнее время в другой момент времени.

Это верно в общем случае между двумя часовыми поясами. Однако некоторые часовых поясах либо переключаются точно в одно и то же время, либо вообще не переключаются.

  • Существует всегда один час между Лондоном и Парижем, поскольку они переключаются в тот же момент времени.
  • Есть всегда 3 часа между Аризоной и Гавайями, потому что у них нет летнего времени.

Имейте в виду, что в Соединенных Штатах каждый часовой пояс, который использует DST, фактически переключается в другой момент времени. Все они переключаются в 2:00 утра в местных времени, но не на том же универсальном момент времени.

  • Так между Чикаго и Нью-Йорком, есть обычно 1 часы врозь
  • Но в течение двух коротких периодов каждого года они либо 2 часа друг от друга, либо имеют же точное время.

См. Также «Часовой пояс! = Смещение» в the timezone tag wiki.

Теперь относительно момента-часового пояса, вы сказали в комментариях:

Веб-сервер находится в восточном часовом поясе; мы в Центральной. Мне нужна разница в часовом поясе пользователя и сервере.

Часовой пояс веб-сервера не имеет значения. Вы должны иметь возможность размещаться в любой точке мира, не затрагивая ваше приложение. Если вы не можете, значит, вы делаете это неправильно.

Вы можете получить разницу времени тока между вашего часового пояса (США по центральному времени) и пользователя. Вам даже не нужно знать точный часовой пояс пользователя для этого, если код работает в браузере:

var now = moment(); 
var localOffset = now.utcOffset(); 
now.tz("America/Chicago"); // your time zone, not necessarily the server's 
var centralOffset = now.utcOffset(); 
var diffInMinutes = localOffset - centralOffset; 

Если вместо того, чтобы код был запущен на сервере (в Node.js приложения), то вам потребуется, чтобы узнать часового пояса пользователя. Просто измените первую строку:

var now = moment.tz("America/New_York"); // their time zone 
Смежные вопросы