2013-05-26 5 views
1

Дата, которую я храню в mysql, выглядит прекрасно при просмотре базы данных, но когда я просматриваю дату, она всегда стоит за днем.Изменение даты из-за установки часового пояса

Тип данных mysql - это «дата». Я получаю столбец даты из mysql с помощью UNIX_TIMESTAMP. Я показываю дату, используя функцию date() php. Я использую bluehost и настроил php.ini, чтобы использовать часовой пояс в Лос-Анджелесе.

Пример: Я создаю новую статью и ключ в 2013-05-08. Он хранится как тип даты в mysql, показывая 2013-05-18. Но когда я пойду посмотреть его позже, он покажет 2013-05-07.

Временная метка 1367992800, которая ср., 08 мая 2013 г. 06:00:00 GMT в GMT, но в моем часовом поясе Вторник, 07 мая 2013 г. 11:00:00.

Как отобразить первоначально запланированную дату 2013-05-18? Я не хочу менять свой часовой пояс на другой, поскольку Лос-Анджелес - это мой правильный часовой пояс и для всех моих других методов, где нам нужно записывать временную метку, это точно.

+0

Ваша проблема - неправильная метка времени вставляется в БД. – vascowhite

ответ

1

Если вы хотите, чтобы ваша дата не зависят от часового пояса, вы должны сохранить его в столбце, который не преобразовать значение. Таким образом, тип столбца date, который вы выбрали, вполне уместен.

Проблема возникает, когда вы пытаетесь получить эту дату в UNIX TIMESTAMP. UNIX TIMESTAMP - это количество секунд с 01.01.1970 в GMT. Это означает, что mysql преобразует вашу дату в метку времени в GMT, используя настройки часового пояса.

Функция даты PHP также зависит от настроек часового пояса php и преобразует временную метку в дату в текущем часовом поясе.

Чтобы получить дату из MySQL без преобразования его в текущий часовой пояс, просто не извлекайте его с помощью функции UNIX_TIEMSTAMP. Получите его как есть или используйте функцию DATE_FORMAT.

+0

Большое спасибо за четкое объяснение. Это было полезно, и это сработало! – TimNguyenBSM

0

Вы должны использовать объект DateTime.

$timezone = new DateTimeZone('Europe/London'); 

$date = new DateTime(); 
$date->setTimestamp($timestamp); 
$date->setTimezone($timezone); 

echo $date->format('Y-m-d H:i:s'); 
+0

Спасибо за помощь. Я выбрал другой ответ, но я кое-что узнал из вашего ответа, который я собираюсь применить к другой части моего кода. – TimNguyenBSM

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