我尝试使用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
为什么呢?如何在不修改原始对象的情况下添加一周?
编辑:我通过克隆原始对象并修改克隆的对象找到了解决方案,但我想知道这种行为是否正确以及为什么
答案 0 :(得分:5)
你可能正在寻找DateTimeImmutable
类,它是相同的,但它并没有改变原始值。从手册开始:
此类与DateTime 的行为相同,但它永远不会自行修改,而是返回一个新对象。