Лучший способ обработки хранения/отображения дат в разных часовых поясах в PHP?
Я читал эту тему в течение последних нескольких часов, и я думаю, что у меня есть ручка, но я хотел бы получить подтверждение.
Ситуация
Я хочу, чтобы пользователь, скажем, Калифорния, мог опубликовать комментарий, который будет храниться в MySQL. Затем я хочу, чтобы пользователь, скажем, в Техасе, мог просмотреть комментарий с датой, настроенной на его часовой пояс.
Предлагаемое решение
Сохранение
- Выполните следующее в начале приложения, чтобы все функции даты использовали часовой пояс UTC:
date_default_timezone_set('UTC');
-
$Date = new DateTime();
, чтобы получить объект DateTime с текущей датой и временем в UTC.
- Используйте
$Date->format()
, чтобы получить значение для вставки в столбец типа datetime в MySQL.
Отображение
- Получить информацию о часовом поясе пользователя с JavaScript и сохранить ее в файле cookie.
- Запустите запрос MySQL SELECT, чтобы получить значение столбца datetime.
-
$Date = new DateTime($row['time']);
для создания объекта DateTime с сохраненным временем UTC.
-
$Date->setTimezone(new DateTimeZone($userTimezone));
, чтобы настроить время UTC на часовой пояс пользователя.
- Отображение с использованием
$Date->format();
Это суть того, что нужно сделать? Не хватает ли лучшего решения? Спасибо за вашу помощь!
Ответы
Ответ 1
Это можно сделать еще проще. Поскольку вы используете JavaScript, почему бы не использовать JavaScript для настройки часового пояса на клиенте?
- Хранить все время на сервере в формате UTC
- Подавать их клиенту как UTC
- Клиент использует время настройки JavaScript в локальном часовом поясе
Это не только упрощает работу, но и устраняет проблему с вашей моделью. Если я зарегистрировал свою учетную запись в Нью-Йорке, но путешествую в Австралию, я хочу видеть время в соответствии с австралийским часовым поясом. Фактически, используя JavaScript, который вы используете, вы можете легко настроить параметры, делая дизайн еще более динамичным. Во-вторых, вы можете избежать накладных расходов на сохранение пользовательского часового пояса.
Тем не менее, если вы хотите, чтобы ваш дизайн ухудшался в браузерах, отличных от JavaScript, вам лучше использовать полный подход на стороне сервера, полагаясь на HTTP файлы cookie (а не полагаться на JS для извлечения файлов cookie).
Ответ 2
Вы все это делаете. Сохраняйте все даты в UTC (GMT + 0), извлекайте их как таковые из базы данных и применяйте смещение пользователя.
По сути, у вас есть все, что покрыто от начала до конца, там действительно ничего не добавить, я не думаю, что вы можете оптимизировать его за пределами того, что делаете уже.