我正在用PHP计算毫秒级的时间差。
我尝试了小时,分钟和秒。如何计算毫秒?
$time1 = strtotime('8:01:13.225');
$time2 = strtotime('8:02:11.088');
$diff = $time2 - $time1;
$diffTime = date('H:i:s',$diff);
我希望$time2-$time1
的输出为0:00:57.863
答案 0 :(得分:1)
strtotime
将解析一个微秒的时间,但是会忽略它们。来自manual:
5.0.0微秒开始被允许,但它们被忽略。
要以微秒为单位进行数学运算,可以使用DateTime
和DateInterval
对象:
$time1 = date_create_from_format('H:i:s.u', '8:01:13.225');
$time2 = date_create_from_format('H:i:s.u', '8:02:11.088');
$diff = $time2->diff($time1);
echo $diff->format('%H:%I:%s.%f');
输出:
00:00:57.863000
更新
似乎某些版本的PHP7 +会以微秒为单位执行奇怪的操作,将其保持为负值,从而导致输出
00:00:58.-137000
要解决此问题,您可以使用以下代码:
$time1 = date_create_from_format('H:i:s.u', '8:01:13.225');
$time2 = date_create_from_format('H:i:s.u', '8:02:11.088');
$diff = $time2->diff($time1);
// correct for weird microseconds behaviour
$secs = $diff->s + (float)$diff->format('%f') / 1000000;
echo $diff->format("%H:%I:$secs");
答案 1 :(得分:0)
处理DateTime
对象的方法
<?php
$time1 = new DateTime('8:01:13.225');
$time2 = new DateTime('8:02:11.088');
$interval = $time1->diff($time2);
echo $interval->format('%H:%I:%s.%f');
?>