v1t3man
@v1t3man

Почему datetime modify работает не корректно?

Версия PHP - 7.2

Имеется код вида:
$time = '2021-05-01 12:00';
$now = new Datetime($time);
$prev = new Datetime($time);
$next = new Datetime($time);
$prev->modify('-2 hours');
$next->modify('3 hours');

По идее, ожидается, что значения будут такие:
$now : 2021-05-01 12:00
$prev : 2021-05-01 10:00
$next : 2021-05-01 15:00

Но по факту получается:
$now : 2021-05-01 12:00
$prev : 2021-05-01 12:00
$next : 2021-05-01 13:00

Тоже самое если $prev и $next задавать через clone $now.

Если бы выполнялось присваивание $next = $prev = $now, было бы понятно откуда эффект, т.к. Datetime передаётся по ссылке, но тут конструктор вызывается каждый раз новый. Непонятно, откуда появляется оптимизация modify.

Почему так получается?

Единственное предположение, что видя Datetime($time), php считает его за один объект и делает 3 ссылки на него, хотя в таком случае, clone должен был бы решить проблему.
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
v1t3man
@v1t3man Автор вопроса
были ошибки на проекте
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы