PHP中如何为DateTime对象加1秒并检查时间差?
哈哈,一眼就看到问题啦!你这里犯了个很容易搞混的小错误,核心问题出在DateInterval的格式字符串上:
问题根源
你写的 PT' . 1 . 'M' 里的 M 代表的是分钟(Minute),但你实际想要添加的是1秒,对应的正确标识符应该是 S(Second)。另外还有个小细节:你在diff->format()里用了两次%m,第一个%m是月份的格式符,第二个想表示分钟的话应该用%i,不然会重复输出月份数值。
修正后的代码
<?php $datetime1 = new \DateTime("now", new \DateTimeZone("UTC")); $datetime2 = new \DateTime("now", new \DateTimeZone("UTC")); // 把M改成S,代表添加1秒 $datetime2->add(new DateInterval('PT1S')); $diff = $datetime1->diff($datetime2); // 把第二个%m改成%i,对应分钟 echo $diff->format('%d days, %m months, %y years, %i minutes, %s seconds'); ?>
额外优化小技巧
如果你想彻底避免两次new \DateTime("now")可能带来的微秒级时间差(虽然概率极低),可以直接克隆第一个DateTime对象:
$datetime2 = clone $datetime1; $datetime2->add(new DateInterval('PT1S'));
验证结果
修正后运行代码,就能得到你预期的输出:
0 days, 0 months, 0 years, 0 minutes, 1 seconds
内容的提问来源于stack exchange,提问作者Exitos
相关产品推荐
相关产品推荐

