Лучший способ обрабатывать хранение / отображение даты в разных часовых поясах в PHP? - PullRequest
29 голосов
/ 06 февраля 2009

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

Положение

Я хочу, чтобы пользователь, скажем, в Калифорнии, мог оставлять комментарии, которые будут храниться в MySQL. Затем я хочу, чтобы пользователь в, скажем, Техасе мог просматривать комментарий с датой публикации, настроенной на его или ее часовой пояс.

Предлагаемое решение

Хранение

  1. Запустите следующее при запуске приложения, чтобы все функции даты использовали часовой пояс UTC: date_default_timezone_set('UTC');
  2. $Date = new DateTime(); для получения объекта DateTime с текущей датой и временем в UTC.
  3. Используйте $Date->format(), чтобы получить значение для вставки в столбец типа datetime в MySQL.

Отображение

  1. Получите информацию о часовом поясе пользователя из JavaScript и сохраните ее в файле cookie.
  2. Запустите запрос MySQL SELECT, чтобы получить значение столбца datetime.
  3. $Date = new DateTime($row['time']); для создания экземпляра объекта DateTime с сохраненным временем UTC.
  4. $Date->setTimezone(new DateTimeZone($userTimezone));, чтобы настроить время UTC на часовой пояс пользователя.
  5. Отображение с использованием $Date->format();

Это суть того, что должно быть сделано? Я пропускаю лучшее решение? Спасибо за вашу помощь!

Ответы [ 2 ]

14 голосов
/ 06 февраля 2009

Это можно сделать еще проще. Поскольку вы используете JavaScript, почему бы не использовать JavaScript для настройки часового пояса на клиенте?

  1. Хранить все время на сервере как UTC
  2. Служите клиенту как UTC
  3. Клиент использует JavaScript для настройки времени на местный часовой пояс

Это не только упрощает задачу, но и устраняет проблему с вашей моделью. Если я зарегистрировал свой аккаунт в Нью-Йорке, но приехал в Австралию, я хочу посмотреть время в соответствии с часовым поясом Австралии. Фактически, с помощью используемого вами JavaScript можно легко настроить параметры, сделав дизайн еще более динамичным. Во-вторых, вы можете избежать затрат на хранение часового пояса пользователя.

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

3 голосов
/ 06 февраля 2009

Ты делаешь все права. Сохраните все даты в формате UTC (GMT + 0), извлеките их как таковые из базы данных и примените смещение пользователя.

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

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