为了获得2天前的当前datetime和datetime,我编写了以下代码;
$now = new \DateTime();
$twoDaysAgo = $now->sub(new \DateInterval('P2D'));
当我运行var_dump($now, $twoDaysAgo);
时结果如下。
// $now
object(DateTime)#496 (3) {
["date"]=>
string(19) "2014-08-04 16:31:08"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
// $twoDaysAgo
object(DateTime)#496 (3) {
["date"]=>
string(19) "2014-08-04 16:31:08"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
两个变量都具有$ twoDaysAgo的相同值。为了获得所需的值,我做了以下几点;
$now = new \DateTime();
$twoDaysAgo = new \DateTime();
$twoDaysAgo = $twoDaysAgo->sub(new \DateInterval('P2D'));
我的问题是,为什么在分配$ twoDaysAgo而不是$ now为当前日期时间值后,$ now和$ twoDaysAgo的值相同?
答案 0 :(得分:7)
::sub()
将更改调用的对象,然后返回自己
在使用它之前克隆$now
可以解决这个问题,如下所示:
$now = new \DateTime();
$twoDaysAgo = clone $now; // clone the current date object
$twoDaysAgo->sub(new \DateInterval('P2D')); // work with the clone