MySQL « К дате в формате datetime прибавить 3 часа?

Запутался немного

Скрипт обрабатывает некие данные и для каждой записи для столбца DateE  типа   datetime вставляет дату .date("Y-m-d H:i:s") таким образом.

Данные получаются в часовой зоне Москвы(+3). Но у нас другой часовой пояс. Вопрос - как сделать "корректировку" при вставке или при выводе потом уже.

Вывод - значение  DateE выводится. 

1 ответов


Раз у Вас пользователи находятся в разных часовых поясах, используйте для хранения даты-времени тип TIMESTAMP -  4-байтное целое число, равное количеству секунд, прошедших с полуночи 1 января 1970 года по усреднённому времени Гринвича (т.е. нулевой часовой пояс, точка отсчёта часовых поясов).
При получении из базы он отображается с учётом часового пояса - достаточно правильно передать значение session.time_zone для соединения с базой.
Данный пример выведет на экран 2013-09-12 06:00:00, хотя добавляли 2013-09-12 09:00:00

mysql_query("SET @@session.time_zone='+03:00'",$conn);
$q = "INSERT INTO Test (DT) VALUES ('2013-09-12 09:00:00')";
if (!mysql_query($q))

    echo ($q);

 
mysql_query("SET @@session.time_zone='+00:00'",$conn);
 
$q = "SELECT DT FROM Test";
$res = mysql_query($q);
if ($res) {

    $row = mysql_fetch_assoc($res);

    echo ($row['DT']);

}
else

    echo ($q);

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

SELECT DateE + INTERVAL 3 HOUR AS DateE FROM `table`