我正在尝试制作时间间隔:$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()对象。
答案 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');