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

时间:2015-05-24 16:01:11

标签: php datetime

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

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:5)

你可能正在寻找DateTimeImmutable类,它是相同的,但它并没有改变原始值。从手册开始:

  

此类与DateTime 的行为相同,但它永远不会自行修改,而是返回一个新对象。