2016-10-10 110 views
2

我正在尝试使时间间隔为:$start$end。但$start总是与$end一样结束,就好像它们都被修改了一样。如何将一分钟添加到PHP中的DateTime()对象?

$dt = new \DateTime(); 
$start = $dt; 
$end = $dt->modify('+1 minute'); 
echo $start->format('i') . ' - ' . $end->format('i'); 

这只是给了我

50 - 50

当我想

49 - 50

我在做什么错?

编辑: 我不想使用时间戳,只有DateTime()对象。

+6

'$ start'指的是与'$ end'相同的对象,make 2个日期时间对象 – apokryfos

回答

4

为什么发生这种情况

$start$end都指向同一个对象,所以当你添加1分钟$dt$start$end将反映这一变化。

你可以做什么

要修复,设置$start$end到datetime对象的新实例。

​​
1

您创建一个DateTime对象$dt,然后使用相同的对象既$start$end。你应该做下列之一:

$dt = new \DateTime(); 
$start = $dt->format('i'); //Store the actual string before modifying 
$dt->modify('+1 minute'); 
echo $start . ' - ' . $end->format('i'); 

或者:

$start = new \DateTime(); 
$end = new \DateTime();  
$end->modify('+1 minute'); 
echo $start->format('i') . ' - ' . $end->format('i'); 
3

到已经给出答案,另一种方法是使用

  • DateTimeImmutable - 这个类的行为一样的DateTime除了它从不修改它自己,而是返回一个新的对象。

例子:

$start = new \DateTimeImmutable(); 
$end = $start->modify('+1 minute'); 
echo $start->format('i') . ' - ' . $end->format('i'); 

这将使您预期的结果。

+0

不知道DateTimeImmutable是一个非常简洁的解决方案。 –