phpmicrotime

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


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 ?


Solution

  • 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 .