繁体   English   中英

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

[英]Difference Between Two Times with microseconds in 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

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

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

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");

3v4l.org上的演示

处理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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM