How to convert microtime() to HH:MM:SS:UU

ProDraz picture ProDraz · May 30, 2013 · Viewed 40.2k times · Source

I was measuring some curl requests and I used microtime(true). The example output would be 3.1745569706

This is 3.1745569706 seconds. I want to convert that to a somewhat more readable format, let's say 00:00:03:17455 (HOURS:MINUTES:SECONDS:MILLISECONDS)

$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

That looks wrong. I'm not quite sure what I'm missing here.

How do I convert microtime() to HH:MM:SS:UU ?

Answer

edwardmp picture edwardmp · May 30, 2013

From the PHP.net article on date() which is similar to gmdate(), except that the time is returned in GMT:

Since this function only accepts integer timestamps the u format character is only useful when using the date_format() function with user based timestamps created with date_create().

Use something like this instead:

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

Which prints: 00:00:03.1745569706

If you want you can use round() to round the $usec var even more.

If you use microtime(true) use this instead:

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