JavaScript, часовые пояса и летнее время - PullRequest
6 голосов
/ 03 марта 2012

Добро пожаловать в эпизод этой недели Еще один вопрос о часовом поясе :

Я довольно много читал о SO, пытался манипулировать моментами.js и date.js впомогая мне, и, как правило, страдала от чувства разочарования с тех пор, как я начала пытаться решить эту проблему, поэтому, если бы кто-то мог помочь или указать мне на повторяющийся вопрос ТАК, который я просто не смог найти, это было бы здорово.


У меня есть страница.Эта страница отображается несколько раз, например: 7:28, 7:38, 7:48.Я знаю, являются ли они AM / PM.Эти времена всегда Америка / Нью-Йорк (они не меняются при изменении летнего времени, поскольку событие, которому они соответствуют, всегда происходит в это время независимо от летнего времени).Давайте назовем их графиком.Я хочу выделить следующее время.

  • Это тривиально для людей, живущих в Америке / Нью-Йорке.
  • Это не так уж страшно для людей, живущих в Америке /Лос-Анджелес (при условии, что моя логика работает).
    • Я могу взять текущее время компьютера в Америке / Лос-Анджелесе, преобразовать его в UTC, затем определить, наблюдает ли Америка / Лос-Анджелес в настоящее время летнее время или нет, и определить, должно ли Америка / Нью-Йорк быть -0400или -0500, примените это к UTC и сделайте мое сравнение.Это немного больно, потому что вы все еще имеете дело с датой, базирующейся в Америке / Лос-Анджелесе, и фактически не меняете часовой пояс объекта Date, но у меня есть надежный способ откатить (или переслать) часы с UTCвремя.

Что происходит, однако, когда я пытаюсь определить, наблюдается ли переход на летнее время с компьютера в регионе, который не наблюдаетнасколько вам известно летнее время?

Насколько мне известно, JavaScript будет создавать только объекты Date для текущего часового пояса, а затем выполнять любое определение летнего времени на основе этого объекта Date.

Мне просто все равно?Время в первую очередь относится только к людям, живущим в Америке / Нью-Йорке в любом случае.Я просто пытаюсь создать приложение, которое имеет смысл при просмотре из другого часового пояса, чтобы в 3 часа ночи в стране и в 14 часов в Америке / Нью-Йорке «график» выдвигал на первый план то, что в 14:05 должно произойти что-то ине в 3:05 утра.

Ответы [ 2 ]

6 голосов
/ 03 марта 2012

Все сравнения со временем должны выполняться с getTime() вашего экземпляра.Это возвращает количество миллисекунд с начала эпохи UTC.Летнее время не имеет значения.Вы отправляете значение getTime() на свой сервер.Затем ваши клиентские скрипты преобразуют это значение обратно в объект JavaScript Date, например, так:

mydate = new Date(longmillisFromAnotherTZ);

Затем используйте любой метод на mydate, чтобы отобразить дату так, как вы хотите.Имеет ли это смысл?Я не вижу, как возникает проблема.Я был бы рад что-нибудь прояснить.

Редактировать:

Просто чтобы быть на 100% ясным ...

Если два разных клиентаМне нужно отображать их действия друг другу в разных часовых поясах. Я предлагаю использовать только значение из (new Date()).getTime(), а затем сохранить его на сервере.Затем сервер отправляет это значение каждому соответствующему клиенту.Затем клиент отвечает за отображение его в своем собственном соответствующем языковом стандарте.

Кроме того, если вам нужна библиотека, которая подходит для получения часовых поясов и смещений, getTimezoneOffset(), как известно, является ненадежным, вы должны проверить этобиблиотека: http://www.pageloom.com/automatic-timezone-detection-with-javascript

4 голосов
/ 03 марта 2012

Ах, кажется, я наконец-то понял, что вы говорите.Вы хотите сказать что-то вроде: «Текущее время в Нью-Йорке составляет _ » в зависимости от времени на компьютере пользователя, и хотя есть поддержка (по крайней мере в документах) для setTimezone("EDT"), этоПохоже, поддержка setTimezone("America/New York").Вам придется либо жестко задавать даты, когда нужно переключаться между EDT и EST (в зависимости от текущего времени по Гринвичу, которое вы можете получить с компьютера пользователя), либо использовать сторонний API (или делать это на стороне сервера)..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...