TLDR:
$date1 = new DateTime();
$date2 = (clone $date1)->modify('+3 years');
( Глубокое копирование DateTime делает (в настоящее время) нет смысл )
Просто так:)
Пояснение "php создать объект datetime из другого datetime":
- Ключевое слово
clone
делает обычную мелкую копию - для этого случая достаточно (почему => см. Ниже)
- Обтекание его
()
вычисляет выражение, возвращающее вновь созданный объект, по clone
->modify()
поэтому вызывается и модифицирует новый объект
DateTime::modify(...)
документы:
Возвращает объект DateTime для объединения методов или FALSE при ошибке.
$date2
теперь содержит только что созданный и измененный клон / копию, а $date1
остается неизменным
Почему вам не нужно глубоко скопировать сюда:
Глубокое копирование / клонирование необходимо только тогда, когда вам нужно скопировать цели со свойствами, ссылками , но это:
class TestDateTime extends DateTime{
public function test(){
//*this* way also outputs private variables if any...
print_r( get_object_vars($this) );
}
}
$test = (new TestDateTime())->test();
выходы: * * тысяча пятьдесят-четырь
Array
(
[date] => 2018-10-01 11:31:29.000000
[timezone_type] => 3
[timezone] => UTC
)
поэтому нет ссылок => нет необходимости глубоко копировать.