[英]How can I add one minute to a DateTime() object in PHP?
我想做一个时间间隔: $start
to $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()对象。
$start
和$end
都引用同一个对象,所以当你向$dt
添加1分钟时, $start
和$end
都会反映出这一变化。
要修复,请将$start
和$end
设置$start
datetime对象的新实例。
$dt = new \DateTime();
$start = new $dt;
$end = new $dt;
$end->modify('+1 minute');
echo $start->format('i') . ' - ' . $end->format('i');
已经给出的答案的替代方案是使用
DateTimeImmutable
- 此类的行为与DateTime相同,只是它从不修改自身,而是返回一个新对象。 例:
$start = new \DateTimeImmutable();
$end = $start->modify('+1 minute');
echo $start->format('i') . ' - ' . $end->format('i');
这将给出您的预期结果。
您创建一个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');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.