Возможный дубликат:
Тип данных / структура для хранения часовых поясов в MySQL
Я буду хранить только время UTC в моей базе данных и хочу преобразовать временные метки в локальное время пользователя с помощью PHP.
Мой вопрос: какой лучший способ хранить часовой пояс пользователей в базе данных?
IE: -400, -4, -4: 00
С учетом сказанного я знаю, как выполнять математику вручную:
$utc_time = strtotime("2011-10-02 23:00:00"); $my_time = $utc_time - 14400; echo date($timeformat, $mytime);
Моя проблема заключается в том, что часовой пояс пользователя извлекается из базы данных, я не знаю, буду ли я добавлять или вычитать секунды. Вот где я столкнулся с проблемой попытаться выяснить, как сохранить часовой пояс, чтобы я мог рассчитать смещение.
Я могу сохранить часовой пояс как «-14400», но, используя приведенный выше пример, я не могу просто объединить две строки, чтобы выполнить математику для меня, используя знак:
$my_time = $utc_time.$timezone;
Итак … как правильно сохранить часовой пояс, чтобы получить математику?
Часовой пояс в одном месте не всегда одинаковый – например, Великобритания – BST (GMT + 1) в период с марта по октябрь. Используйте один из часовых поясов, поддерживаемых PHP:
http://php.net/manual/en/timezones.php
Если вы продолжаете использовать цифры, храните их как часы или минуты. Храните временные интервалы к западу от UTC / GMT как отрицательные числа. Например, Восточное побережье США будет составлять -5
(часы) или -300
(минут) – при условии, что он отстает на 5 часов.
Затем добавьте это в метку времени – отрицательное или положительное будет обрабатывать остальные.
// for 5 hours behind when stored as hours (-5) $now = time() + ($offset * 60 * 60); // for 5 hours behind when stored as minutes (-300) $now = time() + ($offset * 60);
строка часового пояса будет лучше, чем смещение или разница в часах, потому что некоторые временные зоны подвержены изменениям
http://www.php.net/manual/en/class.datetime.php
http://www.php.net/manual/en/class.datetimezone.php
для математики даты / времени:
http://www.php.net/manual/en/class.dateinterval.php
http://www.php.net/manual/en/class.dateperiod.php
прекратите использование php-функций, oop-классы намного лучше!
Вместо того, чтобы хранить его как строку, сохраните его как число? Затем вы можете просто добавить этот номер в метку времени. (Число может быть отрицательным для часовых поясов, которые будут вычитаться.)