Страницы

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

понедельник, 24 февраля 2020 г.

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

#php #время


Сразу приведу пример кода:

$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".
    


Ответы

Ответ 1



В ночь с субботы на воскресенье 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.

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

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