两次之间的差异,以微秒为单位的PHP

时间:2019-04-18 00:43:40

标签: php

我正在用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

2 个答案:

答案 0 :(得分:1)

strtotime将解析一个微秒的时间,但是会忽略它们。来自manual

  

5.0.0微秒开始被允许,但它们被忽略。

要以微秒为单位进行数学运算,可以使用DateTimeDateInterval对象:

$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

Demo on 3v4l.org

更新

似乎某些版本的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");

Demo on 3v4l.org

答案 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');
?>

演示: https://3v4l.org/AjOFD