Подтвердить что ты не робот

Как конвертировать microtime() в HH: MM: SS: UU

Я измерял некоторые завитки, и я использовал 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?

4b9b3361

Ответ 1

Из статьи 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 .

Ответ 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);

OUTPUT

0:0:3.174