MySQL & PHP: различия в работе unix_timestamp() и time()
Сейчас столкнулся с тем, что функции MySQL и PHP которые по-идее должны возвращать одинаковые значения (количество секунд, прошедшее с начала UNIX-эпохи) на самом деле отличаются ровно на 1 час.
Видимо это связано с тем что сейчас идет летнее время, и у меня в Windows XP выбрана часовая зона с поддержкой летнего времени. Такой вывод я сделал потому, что раньше оно не глючило а изменилось тока то что у меня летнее время приключилось.
У меня сломался код, где я читаю поле из базы, которое заполняется функцией unix_timestamp(), и затем передаю это значение в PHP-функцию date(). В итоге имеем час расхождения (+1 час). Пришлось сделать тупой хак (код сильно править не хотелось), – читаю из базы не значение поля а результат его обработки в from_unixtime() а затем, эту строку привожу к unixtimestamp PHP-функцией strtotime().
Вывод: лучше все присвоения “текущей даты” в базу делать из PHP, меньше вероятность что вы наткнетесь на что-то такое, странное.
Проверялось на PHP версий 4.3.11 и 5.2.1, MySQL версии 4.1.11-nt

Меня зовут Владимир. Я живу в России, в 
Один комментарий к “MySQL & PHP: различия в работе unix_timestamp() и time()”
edgar - Дек 7, 2009 | Ответить
int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] )
Аргумент is_dst может быть установлен в 1, если заданной дате соответствует летнее время, 0 в противном случае, или -1 (значение по умолчанию), если неизвестно, действует ли летнеее время на заданную дату. В последнем случае PHP пытается определить это самостоятельно. Это можно привести к неожиданному результату (который, тем не менее, не будет неверным).
Замечание: Аргумент is_dst был добавлен в версии 3.0.10.