[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос по функции strtotime
tishka
Здравствуйте! Заметил неприятную особенность этой функции.
Пишем код:

echo strtotime("2014-10-17 10:02:27");

Получаем в UNIX формате 1413525747
Используем сервис http://www.cy-pr.com/tools/time/, переводим UNIX обратно в обычную дату, тут всё нормально 17.10.2014, 10:02:27.

Далее, пишем код: (изменяем октябрь на декабрь)

echo strtotime("2014-12-17 10:02:27");


Получаем в UNIX формате 1418796147
Через тот же сервис переводим обратно из UNIX, получаем 17.12.2014, 9:02:27

Кто может объяснить, почему получается на час меньше? Вместо 10 часов - 9. То же самое для ноября.
T1grOK
Дык timezone отличается.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Invis1ble
перевод стрелок на зимнее время например

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

tishka
то есть это нормальная ситуация хотите сказать?
У меня вот например на сайте есть условие
if ( time()-strtotime($row->st) > 7200)

$row->st - это значение в базе, например 2014-12-17 19:24:29
Условие должно сработать, если с момента strtotime($row->st), которое в базе, прошло 2 часа (7200 секунд).

До ноября это условие работало нормально. В Ноябре и декабре условие стало срабатывать по истечении 1 часа, вместо двух. Поэтому меня это заинтересовало.

Может подскажете, как решить этот вопрос?
walerus
tishka, Invis1ble дал верный ответ, происходит "перевод стрелок на зимнее время и обратно"..
Цитата
Переход на летнее время происходит в последнее воскресенье марта, а переход на зимнее время — в последнее воскресенье октября.
проверь эти периоды... до марта должно тоже плюсовать по идее...
Hello
tishka перевод из timestamp зависит от часового пояся ОС, обнови его.

_____________
VPS от 5$, первые 2 месяца - бесплатно.
bestxp
укажи часовой пояс в настройках пхп
killer8080
Цитата (tishka @ 17.12.2014 - 23:40)
У меня вот например на сайте есть условие
if ( time()-strtotime($row->st) > 7200)

$row->st - это значение в базе, например 2014-12-17 19:24:29
Условие должно сработать, если с момента strtotime($row->st), которое в базе, прошло 2 часа (7200 секунд).

До ноября это условие работало нормально. В Ноябре и декабре условие стало срабатывать по истечении 1 часа, вместо двух. Поэтому меня это заинтересовало.

это происходит из-за того что настройки часовых поясов PHP и MySQL не совпадают, нужно их синхронизировать. Например так

date_default_timezone_set('Europe/Moscow'); 
$offset = date_offset_get(new DateTime());
$tz_offset = sprintf('%+03d:%02d', $offset / 3600, abs($offset % 3600 / 60));
mysql_query("SET time_zone = '$tz_offset'");
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.