2012-02-21 77 views
9

Cómo restar microtime y mostrar la fecha con milisegundos en php?Cómo restar microtime y mostrar la fecha con milisegundos en php?

Por ejemplo: he puesto fecha y hora

$endtime = 2012-02-21 10:29:59; 

entonces tengo fecha actual o fecha de inicio con el convertido de microtime

$starttime = 2012-02-21 10:27:59.452; 

function getTimestamp() 
{ 
     $microtime = floatval(substr((string)microtime(), 1, 8)); 
     $rounded = round($microtime, 3); 
     return date("Y-m-d H:i:s") . substr((string)$rounded, 1, strlen($rounded)); 
} 

echo getTimestamp(); //sample output 2012-02-21 10:27:59.452 

Ahora quiero restar final: $ finaldate = $ endtime - $ starttime;

Quiero que mi salida sea así: 00: 00: 02,452

Respuesta

16

Es necesario utilizar microtime para los valores de inicio/final, y el único formato para su visualización en el extremo.

// Get the start time in microseconds, as a float value 
$starttime = microtime(true); 

/************/ 
/* Do stuff */ 
/************/ 

// Get the difference between start and end in microseconds, as a float value 
$diff = microtime(true) - $starttime; 

// Break the difference into seconds and microseconds 
$sec = intval($diff); 
$micro = $diff - $sec; 

// Format the result as you want it 
// $final will contain something like "00:00:02.452" 
$final = strftime('%T', mktime(0, 0, $sec)) . str_replace('0.', '.', sprintf('%.3f', $micro)); 

Nota: esta es la devolución de valores de flotador de microtime y el uso de la aritmética flotante para simplificar los cálculos, por lo que sus números puede ser muy ligeramente fuera debido a la flotación redondeo problema, pero usted está redondeando el resultado a 3 dígitos Al final, de todos modos, y las fluctuaciones menores en el tiempo del procesador son mayores que los errores de punto flotante de todos modos, por lo que no es un problema para usted en múltiples niveles.

3

Bien phpmyadmin usa este código como este para calcular el tiempo que tomó una consulta. Es similar a sus requisitos:

//time before 
list($usec, $sec) = explode(' ',microtime($starttime)); 
$querytime_before = ((float)$usec + (float)$sec); 
/* your code */ 

//time after 
list($usec, $sec) = explode(' ',microtime($endtime)); 
$querytime_after = ((float)$usec + (float)$sec); 
$querytime = $querytime_after - $querytime_before; 

Creo que esto debería funcionar para usted. Solo tiene que calcular su formato de salida

Cuestiones relacionadas