Как преобразовать microtime () в HH: MM:SS: UU
Я измерял некоторые запросы curl и использовал microtime(true)
. Пример вывода будет 3.1745569706
Это 3.1745569706
секунды. Я хочу преобразовать это в несколько более читаемый формат, скажем 00: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 ?
3 ответа:
Из PHP.net статья о
date()
который похож наgmdate()
, за исключением того, что время возвращается в GMT:Поскольку эта функция принимает только целочисленные метки времени, формат 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
Если вы хотите, вы можете использовать
round()
для округления$usec
var даже больше.Если вы используете
microtime(true)
Используйте это вместо:list($sec, $usec) = explode('.', microtime(true)); //split the microtime on .
<?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
Предполагая, что человек действительно заботится о микросекундах, что, по общему признанию, редко, тогда он не должен использовать любое представление, которое включает в себя поплавки.
Вместо этого используйте функцию gettimeofday (), которая возвращает ассоциативный массив, содержащий секунды и микросекунды в виде целых чисел.
$g1 = gettimeofday(); # execute your process here $g2 = gettimeofday(); $borrow = $g2['usec'] < $g1['usec'] ; $seconds = $g2['sec'] - $g1['sec'] - $borrow ; $micros = $borrow*1000000 + $g2['usec'] - $g1['usec'] ; $delta = gmdate( 'H:i:s.', $seconds ).sprintf( '%06d', $micros );