2009-02-05 1 views
29

Я читал эту тему за последние несколько часов, и я думаю, что у меня есть ручка, но я хотел бы получить подтверждение.Лучший способ обработки хранения/отображения дат в разных часовых поясах в PHP?

Ситуация

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

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

Хранение

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

Показано

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

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

ответ

14

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

  1. магазин все время на сервере, как UTC
  2. Подавать их клиенту в формате UTC
  3. Клиент использует JavaScript настроить время локального часового пояса

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

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

+0

Я думаю, что я собираюсь установить cookie часового пояса при входе в систему, поэтому он должен обновиться, если вы отправитесь в Австралию и войдите туда. Вы предлагаете, чтобы какой-то JavaScript работал на загрузке страницы, который ищет время, скажем, и преобразует их все на лету? –

+0

Единственный способ добраться до пользовательских часов - через JS или geo-ip. Последнее сложное и ненадежное. Если вы собираетесь использовать JS в любом случае, то для этого во время входа в систему требуется больше домашнего обслуживания (отслеживание на стороне сервера). Делать это на лету имеет больше смысла здесь. – aleemb

+0

Спасибо. Поскольку я больше изучаю это, я начинаю с тобой соглашаться. –

3

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

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

+0

Согласен, это то, что я буду делать. – Ross

Смежные вопросы