Страницы

Поиск по вопросам

понедельник, 6 мая 2019 г.

Почему strtotime() и time() дают разное время?

Сразу приведу пример кода:
$time1 = strtotime('+1 week'); $time2 = time() + 3600*24*7;
var_dump($time1); var_dump($time2);
echo PHP_EOL;
var_dump(date('Y-m-d H:i:s', $time1)); var_dump(date('Y-m-d H:i:s', $time2));
Вот полученные результаты:
int(1459164441) int(1459168041)
string(19) "2016-03-28 12:27:21" string(19) "2016-03-28 13:27:21"
Т.е. разница ровно час.
Случайно наткнулся, проверял чего тест стал падать, там дата проверялась.
Интересно, что вчера и позавчера, неделю и месяц назад возвращаемое время было абсолютно одинаковым!
UPD: Временная зона установлена "Europe/London".


Ответ

В ночь с субботы на воскресенье 27 марта часы переводятся на час назад. Временная зона была установлена "Europe/London".
Т.к. сегодня стукнуло 21 марта, то через неделю уже будет 28 марта. И соответственно время strtotime('+1 week') уже выдаёт результат с учётом перевода времени на час назад.
У нас в Беларуси уже отменили перевод на летнее/зимнее время. В России тоже. На временной зоне "Europe/Minsk" и "Europe/Moscow" возвращаемое время одинаковое в обоих случаях.
$time1 = strtotime('+1 week'); $time2 = time() + 3600*24*7;
В общем, проблема различий во времени связана с переводом времени на час для указанной временной зоны "Europe/London".
Функция strtotime учитывает часовой пояс, а time - нет, возвращает unix-timestamp.

Комментариев нет:

Отправить комментарий