2008-11-10 3 views
9

Каков наилучший способ хранения информации о часовом поясе с датами/временем в единой форме, чтобы люди могли вводить время из любой точки мира в свое местное время? Тогда у других пользователей будет возможность просматривать время в свое местное время и исходное местное время на веб-странице.Лучший способ хранить дату и время для разных часовых поясов

ответ

8

Храните данные о времени как GMT. Отобразите его с использованием местного времени. Для этого требуется простое смещение от GMT. Теперь, если политики покинут дату начала и окончания дневного времени сбережения света ...

+2

Или избавитесь от летнего времени вообще, так как не многие из нас все еще должны выполнять хозяйственные работы каждое утро. – MusiGenesis 2008-11-10 15:27:56

+1

Или избавитесь от часовых поясов. – kenny 2009-09-26 16:08:17

1

Мое мнение всегда заключалось в том, чтобы хранить точные числовые метки времени (секунды или миллисекунды с полуночи 1 января 1970 г. по Гринвичу), так как это формат, который легко преобразуется в фактическую дату и время в любой временной зоне.

Недостатком этого является то, что данные не так доступны для просмотра через обычные инструменты SQL. У клиента mysql cli есть методы для этого (FROM_UNIXTIMESTAMP).

+0

Недостатком является то, что вы ввернуты, когда возникла лепсовая смена – Pacerier 2012-01-13 10:14:21

8

Я согласен с Staale, но добавьте, что время должно храниться в Zulu time (обычно называемом UTC), чтобы сделать упростить перевод в другие часовые пояса. Не полагайтесь на сохранение данных в часовом поясе, используемом вашим сервером.

1

Всегда храните как раз UTC/GMT. Проверьте документы mysql, чтобы узнать, какой тип столбца лучше всего подходит для диапазона дат и/или точности, которые вы хотите поддерживать.

На входе преобразование в UTC и сохранение смещения часового пояса клиента во втором столбце. Затем вы можете легко конвертировать в любой часовой пояс, который вы хотите отображать, или использовать отправленное смещение, чтобы воссоздать исходную метку времени.

6

Предлагаю ввести дату в часовой пояс UTC. Это позволит вам сэкономить много головной боли в будущем (переход на летнее проблемы и т.д ...)

"INSERT INTO abc_table (registrationtime) VALUES (UTC_TIMESTAMP())" 

Когда я запрашиваю мои данные я использую следующий скрипт

<? while($row = mysql_fetch_array($registration)){ 

    $dt_obj = new DateTime($row['message_sent_timestamp']." UTC"); 
    $dt_obj->setTimezone(new DateTimeZone('Europe/Istanbul')); 
    echo $formatted_date_long=date_format($dt_obj, 'Y-m-d H:i:s'); } ?> 

Вы можете заменить datetimezone значение с одним из доступных php timezones здесь:

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