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