如何在PHP中添加一分钟到DateTime()对象?

时间:2016-10-10 11:51:16

标签: php

我正在尝试制作时间间隔:$start$end。但$start总是与$end结尾,就像它们都被修改一样。

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

这只是给了我

  

50 - 50

我想要的时候

  

49 - 50

我做错了什么?

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

3 个答案:

答案 0 :(得分:4)

为什么会这样?

$start$end都引用相同的对象,因此当您向$dt添加1分钟时,$start$end都会反映更改。

你能做什么

要解决此问题,请将$start$end设置为日期时间对象的新实例。

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

答案 1 :(得分:3)

已经给出的答案的替代方法是使用

  • DateTimeImmutable - 此类的行为与DateTime相同,但它从不修改自身,而是返回一个新对象。

示例:

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

这会给出您的预期结果。

答案 2 :(得分: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');