如何修改原始DateTime对象而不更改其值?

Rey*_*rPM 5 php datetime

我正在尝试使用OOP方式获取当前日期/时间,如下所示:

$now = new \DateTime(); // 2015-05-24 11:21:36 -> this works fine
Run Code Online (Sandbox Code Playgroud)

我也在同一个对象上加1周,$now所以我这样做了:

$expireTime = $now->modify('+1 week'); // 2015-05-31 11:21:36 -> this also works fine
Run Code Online (Sandbox Code Playgroud)

如果我这样做,用同样的方法:

echo $now; 
// Output: 2015-05-31 11:28:59
// Got wrong value, should be original date without modification

echo $expireTime;
// Output: 2015-05-31 11:28:59 
// Got the right value since I have added 1 week
Run Code Online (Sandbox Code Playgroud)

为什么?如何在不修改原始对象的情况下添加一周?

编辑:我通过克隆原始对象并修改克隆的对象找到了解决方案,但我想知道这种行为是否正确以及为什么

Riz*_*123 6

您可能正在寻找DateTimeImmutable相同的类,但它不会更改原始值.从手册中可以看出:

此类的行为与DateTime相同,只是它从不修改自身,而是返回一个新对象.