Область и местоположение важны, если вы хотите сохранить все данные.Лучший способ (на мой взгляд) для хранения дат - это сохранить временную метку UTC + местоположение.
Просто смещение может быть достаточно для некоторых вычислений, но этого может быть недостаточно, если у вас есть временная метка, ихочу узнать точное время для чего-то вроде «+1 день».Так как это зависит от страны, в которой действуют разные правила перехода на летнее время.
Поэтому, если вы хотите быть абсолютно уверены, что вы не «теряете информацию» и не можете выполнять расчеты на основе времени в будущем, сохраните UTC.отметка времени и идентификатор olson (например, Европа / Амстердам).
Чтобы ответить на второй вопрос, если у вас есть эти две части информации, вы можете легко восстановить ее с помощью DateTime:
$dt = new DateTime('@' . $timeStamp);
// Now convert it to the users timezone
$dt->setTimeZone(new DateTimeZone('Europe/Berlin'));
// Now you have a 'DateTime' object which you can easily display with the ->format function.
Добавление
Лично я предпочитаю хранить метки времени как целые числа.Тип TIMESTAMP выполняет автоматическое преобразование, и я чувствую, что лучше разрешить PHP-приложению справиться с этим, это имеет особый смысл для того, что я считаю вашим вариантом использования (простая локализация для пользователей).
Использование DATETIME также работает, но требования к хранению намного выше, чем просто использование целого числа.Если вы предпочитаете DATETIME, попробуйте установить в своем приложении правило хранить каждое значение всегда в формате UTC, поскольку не возникает путаницы, особенно в отношении переходов DST и изменений законодательства в вашем часовом поясе.
ЕслиВы просто хотите, чтобы в вашем веб-приложении отображалось время, рассчитанное на основе местного часового пояса пользователя, смещение бесполезно.Смещение изменяется два раза в год для большинства стран, и почти каждый год одна или две страны меняются, когда это происходит.
Местоположение требуется только в том случае, если вы используете потрясающие объекты DateTime и DateTimeZone в PHP.
Последний совет:
Люди, как правило, путают даты и время в приложениях PHP и отправляют эти значения во многих различных форматах (строки, целые и т. Д.) И смешивают GMT и UTC.Попробуйте сделать для себя правилом только когда-либо отправлять объекты DateTime в аргументах функций и возвращаемых значениях, чтобы вы могли вводить подсказки и никогда не возникало никаких сомнений в том, в каком формате находится переменная. Это будет полезноэто.