Javascript объект даты в другой локали и часовом поясе - PullRequest
5 голосов
/ 15 июня 2011

Мне нужно написать веб-приложение, которое показывает события людей в разных локалях.Я почти закончил, но есть 2 проблемы с датой:

  • с использованием объекта javascript date, дата зависит от настроек компьютера пользователя, и она не надежна
  • , если событие вместо с различным часовым поясом учитывает текущую позицию пользователя, я должен напечатать его внутри ().Можно ли в javascript построить объект даты с заданными настройками часового пояса и дневного света?

Я также нахожу некоторые обходные пути, такие как jsdate и date webservices, но они не решают проблему наличияобъект javascript с правильными настройками часового пояса и дневного света (для операций с датами, таких как добавление дней и т. д.).

Ответы [ 4 ]

6 голосов
/ 21 июня 2011

Несколько вещей, которые нужно иметь в виду.

Сохранить все даты и время события в формате UTC

Да, обойти это невозможно.

Узнайте все часовые пояса ...

... всех пользователей в системе. Вы можете использовать следующий сценарий обнаружения: http://site.pageloom.com/automatic-timezone-detection-with-javascript. Он выдаст вам ключ часового пояса, например, "Америка / Феникс".

В вашем случае вам необходимо сохранить часовой пояс вместе с событием, поскольку пользователь может переключать часовой пояс - но событие всегда будет происходить в конкретном. (Argh)

Выберите механизм отображения

Если вы хотите локализовать даты ваших событий с помощью Javascript, для этого тоже есть изящная библиотека (которая может использовать ключи, предоставленные в предыдущем сценарии). Здесь: https://github.com/mde/timezone-js.

с этой библиотекой вы можете, например, сделать это:

var dt = new timezoneJS.Date(UTC_TIMESTAMP, 'America/New_York');

или

var dt = new timezoneJS.Date(2006, 9, 29, 1, 59, 'America/Los_Angeles');

где UTC_TIMESTAMP, например, может быть 1193855400000. И America/New_York - это часовой пояс, который вы обнаружили, когда произошло событие.

Полученный из этого объект dt будет вести себя как обычный объект JavaScript Date. Но автоматически «исправит» себя в указанном часовом поясе (включая летнее время).

Если вы хотите, вы можете внести все исправления в бэкэнд - до того, как вы откроете страницу. Поскольку я не знаю, какой язык программирования вы там используете, я не могу дать вам немедленных советов. Но в основном это следует той же логике, если вы знаете часовой пояс и дату и время UTC -> вы можете локализовать дату и время. Все языки программирования имеют библиотеки для этого.

2 голосов
/ 15 июня 2011

Вам не хватает точки объекта Date.Это представляет определенный момент времени.Как я говорю, это 1308150623182 во всем мире.Часовой пояс вступает в игру только тогда, когда вы хотите отобразить время для пользователя.Операция типа «добавление дня» вообще не включает часовой пояс.

0 голосов
/ 16 июня 2011

Использование getUTCDate(), getUTCHours(), ... вместо getDate(), getHours(), ... getTimetoneOffset() также может быть полезным.

0 голосов
/ 15 июня 2011

Одной из возможностей может быть использование даты и времени UTC для всего. Таким образом, нечего конвертировать.

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

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