Je mesurais certaines demandes de boucles et j’utilisais microtime(true)
. L'exemple de sortie serait 3.1745569706
Ceci est 3.1745569706
secondes. Je veux convertir cela en un format un peu plus lisible, disons 00:00:03:17455
(HEURES: MINUTES: SECONDES: 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
Cela semble faux. Je ne suis pas tout à fait sûr de ce que je manque ici.
Comment convertir microtime () en HH: MM: SS: UU?
Extrait de l'article PHP.net sur date()
qui est similaire à gmdate()
, sauf que l'heure est renvoyée à l'heure GMT:
Puisque cette fonction accepte uniquement les horodatages entiers, le format u Ce caractère n'est utile que lorsque vous utilisez la fonction date_format () avec horodatages basés sur l'utilisateur créés avec date_create ().
Utilisez quelque chose comme ceci à la place:
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
Quelles impressions: 00:00:03.1745569706
Si vous le souhaitez, vous pouvez utiliser round()
pour arrondir encore davantage le $usec
var.
Si vous utilisez microtime(true)
, utilisez ceci à la place:
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);
SORTIE
0:0:3.174
En supposant que l’on se soucie vraiment des microsecondes, ce qui est certes rare, il ne faut pas utiliser de représentation qui implique des flottants.
Utilisez plutôt gettimeofday () qui renverra un tableau associatif contenant les secondes et les microsecondes sous forme d’entiers.
$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 );