Несколько вещей, которые нужно иметь в виду.
Сохранить все даты и время события в формате 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 -> вы можете локализовать дату и время. Все языки программирования имеют библиотеки для этого.