我有这个非常简单的代码:
$start_date = new DateTime($post['start_date']);
$end_date = $start_date->add(new DateInterval('P6M'));
echo $start_date->getTimestamp(); // 1351836000
echo $end_date->getTimestamp(); // 1351836000
当然,两者都以相同的时间戳结束,因为添加日期间隔会影响原始的$ start_date。那么我该如何解决这个问题呢?所以我可以保留原来的$ start_date,在另一个变量中添加6个月呢?
我试了这个没有运气:
$start_date = new DateTime($post['start_date']);
$start_date_actual = $start_date;
$end_date = $start_date_actual->add(new DateInterval('P6M'))->getTimestamp();
答案 0 :(得分:15)
变量保持对对象的引用,而不是对象本身。因此赋值只会让你获得更多指向同一个对象的变量,而不是指向对象的多个副本。
如果您想要副本,请使用clone
关键字:
$end_date = clone $start_date;
$end_date->add(new DateInterval('P6M'));
答案 1 :(得分:2)
你可以选择:
$start_date = new DateTime($post['start_date']);
$end_date = new DateTime($post['start_date']);
$end_date->add(new DateInterval('P6M'));
或
$start_date = new DateTime($post['start_date']);
$end_date = clone $start_date;
$end_date->add(new DateInterval('P6M'));
答案 2 :(得分:0)
在修改之前克隆开始日期:
$start_date = new DateTime();
$end_date = clone $start_date;
$end_date->add(new DateInterval('P6M'));
echo $start_date->getTimestamp();
echo $end_date->getTimestamp();
有关详细信息,请参阅手册