Web*_*ron 0 php datetime dateinterval
我正在尝试使用date_add和在日期中加上和减去#天date_sub,但是得到一些奇怪的结果。我认为这是一个简单的答案,我对PHP并不了解,所以不知道为什么。
这是我的代码:
$y = new DateTime('2016-05-17');
$z2 = 7;
$tempy = $y;
$tempy->sub(new DateInterval('P' . $z2 . 'D'));
$startdate = date_format($tempy, "Y-m-d");
$y->add(new DateInterval('P' . $z2 . 'D'));
$enddate = date_format($y, "Y-m-d");
echo "Start: " . $startdate . " End: " . $enddate . "\r\n";
Run Code Online (Sandbox Code Playgroud)
结果如下:
Start: 2016-05-10 End: 2016-05-17
看起来,即使我使用一个临时变量$tempy作为开始日期,它仍然会对其进行修改,并且结束日期已关闭。
编辑:预期结果:
Start: 2016-05-10 End: 2016-05-24
当您这样做时:
$tempy = $y;
Run Code Online (Sandbox Code Playgroud)
您创建对第一个对象的伪引用,但实际上并没有复制它。为此,您需要使用clone关键字:
$tempy = clone $y;
Run Code Online (Sandbox Code Playgroud)
现在,一切都会按预期进行。如果不进行克隆,则在修改$tempy时也会修改$y
编辑:添加有关此手册的链接(来自@Devon的答案)http://php.net/manual/zh/language.oop5.references.php