2011-06-24 16 views
15

Tengo el tiempo de inicio de la tienda como microtime() y la hora de finalización como microtime() en la base de datos.microtime a segundos o horas o conversión mínima

Ahora quiero calcular cuánto tiempo el script toma los segundos/minutos/horas para ejecutar.

¿Cómo puedo hacer en PHP?

Respuesta

30

básicamente, de esta manera:

echo date("H:i:s",$endtime-$starttime); 

$endtime-$starttime da la duración en segundos, date se utiliza para formatear la salida. Suena como que guardar y leer desde una base de datos no es tu problema aquí, así que lo dejé en mi ejemplo. Tenga en cuenta que tendrá que usar microtime(true) para que funcione, con la salida separada de espacio de microtime() no puede hacer cálculos tan fácil.

EDIT: que podría hacer todo el cálculo por su cuenta, también. Es matemática básica justa como esto:

$duration = $endtime-$starttime; 
$hours = (int)($duration/60/60); 
$minutes = (int)($duration/60)-$hours*60; 
$seconds = (int)$duration-$hours*60*60-$minutes*60; 
+4

Su primera el ejemplo no siempre funcionará 'microtime' devuelve una marca de tiempo de unix, que obviamente comienza en 1/1/70 00:00:00 UTC. Si '$ endtime - $ starttime' es mayor que 24 horas, la marca de tiempo diff devuelta representaría 2/1/70 01:00:00 UTC (suponiendo que son exactamente 25 horas). Formatear esto como 'H: i: s' daría' 01: 00: 00', que parece ser de una hora. –

+2

Además, podría valer la pena señalar en su segundo ejemplo que 'microtime()' devuelve una cadena de 'timestamp microsegundos' - no se pueden hacer cálculos matemáticos sobre esto, por lo que deberá usar' microtime (true) ' para obtener un flotador –

+1

oh, gracias por la sugerencia de Adam, no he pensado en eso, pero tienes razón: si la duración pudiera ser de más de 24 horas, mi primera solución no funcionaría, habría que agregar "d" (y "m" e "Y" si es necesario) para generar el número de días o hacer el cálculo manualmente (como se muestra en mi segundo ejemplo) – oezi

3

Si usted tiene un tiempo A y un tiempo B, en segundos, entonces el número de segundos entre esas dos tiempos absolutos es:

B - A 

Si desea para formatear este número de segundos, puede usar date para embellecerlo.

12

microtime a segundos o horas o min conversión?

microtime es el nombre de la función PHP que devuelven una medida de tiempo en microsegundos y básicamente microsegundos se pueden convertir en:

 

    1 milliseconds = 1,000 microseconds 
    1 second  = 1,000,000 microseconds 
    1 minute  = 60,000,000 microseconds 
    1 hour   = 3,600,000,000 microseconds 


    or 


    1 microsecond = 0.001 milliseconds 
    1 microsecond = 0.000001 seconds 
    1 microsecond = 0.0000000166666667 minutes 
    1 microsecond = 0.000000000277777778 hours 

3
function formatPeriod($endtime, $starttime) 
    { 

    $duration = $endtime - $starttime; 

    $hours = (int) ($duration/60/60); 

    $minutes = (int) ($duration/60) - $hours * 60; 

    $seconds = (int) $duration - $hours * 60 * 60 - $minutes * 60; 

    return ($hours == 0 ? "00":$hours) . ":" . ($minutes == 0 ? "00":($minutes < 10? "0".$minutes:$minutes)) . ":" . ($seconds == 0 ? "00":($seconds < 10? "0".$seconds:$seconds)); 
} 
0
.heading { 
    color: #666; 
    border-bottom: 1px dotted #ddd; 
    font-weight: normal; 
} 
.intro { 
    color: #666; 
    background: #f5f5f5; 
    border: 1px solid #ccc; 
    border-radius: 2px; 
    padding: 10px; 
} 
<h1 class="heading">Someo Coole!</h1> 
<p class="intro">I am a very little boy! Thanks for letting me do some stuff here and around here!</p> 
<p>Sorry for taking place for none!</p> 
function formatPeriod($endtime, $starttime) 
{ 
$duration = $endtime - $starttime; 

$hours = (int) ($duration/60/60); 

$minutes = (int) ($duration/60) - $hours * 60; 

$seconds = (int) $duration - $hours * 60 * 60 - $minutes * 60; 

return ($hours == 0 ? "00":$hours) . ":" . ($minutes == 0 ? "00":($minutes < 10? "0".$minutes:$minutes)) . ":" . ($seconds == 0 ? "00":($seconds < 10? "0".$seconds:$seconds)); 
} 
Cuestiones relacionadas