如何将microtime()转换为HH:MM:SS:UU

2022-08-30 18:29:36

我正在测量一些卷曲请求,我使用了.示例输出为microtime(true)3.1745569706

这是几秒钟。我想将其转换为更具可读性的格式,比方说(小时:分钟:秒:毫秒)3.174556970600:00:03:17455

$maxWaitTime = '3.1745569706';
echo gmdate("H:i:s.u", $maxWaitTime);

// which returns
00:00:01.000000

echo date("H:i:s.u" , $maxWaitTime)
// which returns
18:00:01.000000

这看起来不对劲。我不太确定我在这里错过了什么。

如何将microtime()转换为HH:MM:SS:UU?


答案 1

PHP.net date() 上的文章,它与 类似,只是时间以 GMT 返回:gmdate()

由于此函数仅接受整数时间戳,因此 u 格式字符仅在使用 date_format() 函数以及使用 date_create() 创建的基于用户的时间戳时才有用。

请改用类似下面的内容:

list($usec, $sec) = explode(' ', microtime()); //split the microtime on space
                                               //with two tokens $usec and $sec

$usec = str_replace("0.", ".", $usec);     //remove the leading '0.' from usec

print date('H:i:s', $sec) . $usec;       //appends the decimal portion of seconds

哪些打印:00:00:03.1745569706

如果你愿意,你可以使用四舍五入的 var 甚至更多。round()$usec

如果您使用此选项,请使用此选项:microtime(true)

list($sec, $usec) = explode('.', microtime(true)); //split the microtime on .

答案 2
<?php

function format_period($seconds_input)
{
  $hours = (int)($minutes = (int)($seconds = (int)($milliseconds = (int)($seconds_input * 1000)) / 1000) / 60) / 60;
  return $hours.':'.($minutes%60).':'.($seconds%60).(($milliseconds===0)?'':'.'.rtrim($milliseconds%1000, '0'));
}

echo format_period(3.1745569706);

输出

0:0:3.174

推荐