Функция date меняет поведение в PHP 8.x
При переносе Legacy-проекта с PHP 7.4 на 8.4 столкнулся с недокументированной проблемой изменения поведения функции date при передаче в качестве параметра timestamp значения NULL Один и тот же код даст разный результат:
echo date("Y-m-d H:i:s", null);
// PHP 7.4 и ниже 1970-01-01 00:00:00
// PHP 8.0 и выше 2026-01-14 08:11:56В примере NULL передается в явном виде, но в рабочем коде он вполне может прилетать из БД или других переменных, поэтому потенциальная ошибка может остаться незамеченной. Вообще, по принципам ООП, явное всегда лучше неявного, да и сам я сторонник использования \DateTime. В этом случае, результат кода:
$date = new \DateTime();
$date->setTimestamp(null);
echo $date->format("Y-m-d H:i:s");был бы одинаковый, а с версии 8.1 вы бы начали получать предупреждение
Deprecated: DateTime::setTimestamp(): Passing null to parameter #1 ($timestamp)
of type int is deprecated
1970-01-01 00:00:00Я бы рекомендовал перед миграцией версий PHP в Legacy-проектах либо учитывать эту особенность поведения функции date и убедиться, что NULL не приходит в параметр timestamp, либо сразу сделать рефакторинг на \DateTime, чтобы в принципе избежать таких проблем.
