CanVas
@CanVas
Веб-мастер

Php new DateTime() меняет время с 10 часов на 22 часа. Почему?

Проблема: php сам меняет 10 часов на 22 часа.

Порядок выполнения:
Выполняется php. Я в самом начале ставлю в нём время на международное:
date_default_timezone_set('UTC');

Далее записываю в БД текущую дату и время так:
$tmptime = new DateTime();
$tmpstr = "INSERT INTO ... email_send='".$tmptime->format(DATETIMEFORMAT)."'";

Столбец email_send в MYSQLI это просто столбец типа "datetime" без указания длины.

Спустя некоторое время я вытаскиваю из БД это время и пытаюсь сравнить с текущим временем:
$email_send = $data['email_send'];
$alerts->add('$email_send='.$email_send,'info',$email_send);
$datetime1 = DateTime::createFromFormat(DATETIMEFORMAT, $email_send); //тут пробовал по разному - результат один и тот же.
$datetime2 = new DateTime();
$alerts->add('$datetime1='.$datetime1->format(DATETIMEFORMAT),'info',$datetime1);
$alerts->add('$datetime2='.$datetime2->format(DATETIMEFORMAT),'info',$datetime2);
$interval = $datetime1->diff($datetime2);
$alerts->add('$interval='.$interval->format('%y-%m-%d %h:%i:%s'));


В итоге у меня выводит:

$email_send=2015-01-10 10:44:47 = 2015-01-10 10:44:47//строка полученная из БД
$datetime1=2015-01-10 10:44:47 = DateTime Object ( [date] => 2015-01-10 10:44:47 [timezone_type] => 3 [timezone] => UTC )
$datetime2=2015-01-10 10:54:39 = DateTime Object ( [date] => 2015-01-10 22:54:39 [timezone_type] => 3 [timezone] => UTC )
$interval=0-0-0 12:9:52


При первом взгляде всё ок - разница должна быть почти 10 минут. Но погодите ка... откуда 12 часов? а оттуда - что при просмотре print_r - текущая дата ($datetime2) становится уже после обеда. не понятно почему.

Внимание вопрос - почему php меняет время на 22 часа? При абсолютно одинаковых условиях выполнения.
Костыль типа "прибавить 12 часов для всех случаев" меня не устраивает. Я хочу докопаться до истины.
Зачем мне генерировать время в php? А не использовать встроенное в mysql - timestamp? Мне необходимо унифицировать время везде в UTC. Что бы потом я каждому конкретному посетителю мог конвертировать время в его местное время. А время настроенное на сервере php и mysql может отличаться. Зависит от криворукости хостинга.
  • Вопрос задан
  • 2740 просмотров
Решения вопроса 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
формат даты и времени по-умолчанию берется из php.ini (вроде так...)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы