milisegundos - time in millis php
Cómo convertir microtime() a HH: MM: SS: UU (3)
Estaba midiendo algunas solicitudes de rizo y usé microtime(true)
. La salida del ejemplo sería 3.1745569706
Esto es 3.1745569706
segundos. Quiero convertir eso a un formato algo más legible, digamos 00:00:03:17455
(HORAS: MINUTOS: SEGUNDOS: 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
Eso se ve mal. No estoy muy seguro de lo que me estoy perdiendo aquí.
¿Cómo convierto microtime () a HH: MM: SS: UU?
Del artículo de PHP.net en date()
que es similar a gmdate()
, excepto que la hora se devuelve en GMT:
Dado que esta función solo acepta marcas de tiempo enteras, el carácter de formato u solo es útil cuando se utiliza la función date_format () con marcas de tiempo basadas en el usuario creadas con date_create ().
Use algo como esto en su lugar:
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
Que imprime: 00:00:03.1745569706
Si lo desea, puede usar round()
para redondear las $usec
var aún más.
Si usas microtime(true)
usa esto en su lugar:
list($sec, $usec) = explode(''.'', microtime(true)); //split the microtime on .
Suponiendo que uno realmente se preocupa por los microsegundos, lo que es bastante raro, entonces no se debe usar ninguna representación que implique flotantes.
En su lugar, use gettimeofday () que devolverá una matriz asociativa que contiene los segundos y microsegundos como enteros.
$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 );
<?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);
SALIDA
0:0:3.174