9

我有这个非常简单的代码:

$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();
4

3 回答 3

19

变量保存对对象的引用,而不是对象本身。所以赋值只会让你有更多的变量指向同一个对象,而不是对象的多个副本。

如果您想要副本,请使用clone关键字:

$end_date = clone $start_date;
$end_date->add(new DateInterval('P6M'));
于 2012-05-02T18:48:13.100 回答
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'));
于 2012-05-02T18:48:00.593 回答
0

在修改之前克隆开始日期:

$start_date = new DateTime();
$end_date = clone $start_date;
$end_date->add(new DateInterval('P6M'));
echo $start_date->getTimestamp();
echo $end_date->getTimestamp();

有关更多信息,请参阅手册

于 2012-05-02T18:48:08.830 回答