Версия 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 должен был бы решить проблему.