2011-10-21 13 views
21

Hola, todos Estoy tratando de calcular el tiempo transcurrido en php. El problema no está en php, sino en mis habilidades matemáticas. Por ejemplo: Hora en: 11:35:20 (hh: mm: ss), ahora diga que la hora actual es: 12:00:45 (hh: mm: ss) luego la diferencia de tiempo en mi fórmula da el resultado: 1: -34: 25. En realidad debería ser: 25:25Calcular el tiempo transcurrido en php

$d1=getdate(); 
$hournew=$d1['hours']; 
$minnew=$d1['minutes']; 
$secnew=$d1['seconds']; 

$hourin = $_SESSION['h']; 
$secin = $_SESSION['s']; 
$minin = $_SESSION['m']; 

$h1=$hournew-$hourin; 
$s1=$secnew-$secin; 
$m1=$minnew-$minin; 

if($s1<0) { 
    $s1+=60; } 
if($s1>=(60-$secin)) { 
    $m1--; } 
if($m1<0) { 
    $m1++; } 
echo $h1 . ":" . $m1 . ":" . $s1; 

¿Alguna ayuda por favor?

EDITAR

sentimos que probablemente tenía que añadir que la página se actualiza cada segundo para mostrar el nuevo tiempo transcurrido así que tengo que usar mi método anterior. Mis disculpas por no explicar correctamente.

+0

Considere la posibilidad de convertir a marcas de tiempo con 'mktime()' y luego realice una resta simple. Y tal vez sería una buena idea simplemente trabajar con 'time()' en lugar de 'getdate()' en ese caso. –

+0

y si usabas un enfoque inverso? ¿Sabes la hora en que el usuario inició sesión y luego muestra una especie de prueba? – JellyBelly

+0

Que todos ustedes para las respuestas, finalmente lo conseguí trabajando después de mirar todas las respuestas con lo siguiente: 'if ($ s1 <0) { \t $ s1 + = 60; } if ($ s1> = (60- $ secin)) { \t $ m1--; \t} if ($ m1 <0) { $ m1 * = -1; $ m1 = (60 - $ m1); $ h1--; } ' – Wilest

Respuesta

37

Esto le dará la cantidad de segundos entre el inicio y el final.

<?php 

// microtime(true) returns the unix timestamp plus milliseconds as a float 
$starttime = microtime(true); 
/* do stuff here */ 
$endtime = microtime(true); 
$timediff = $endtime - $starttime; 

?> 

Para mostrar que el reloj de estilo después, usted haría algo como esto:

<?php 

// pass in the number of seconds elapsed to get hours:minutes:seconds returned 
function secondsToTime($s) 
{ 
    $h = floor($s/3600); 
    $s -= $h * 3600; 
    $m = floor($s/60); 
    $s -= $m * 60; 
    return $h.':'.sprintf('%02d', $m).':'.sprintf('%02d', $s); 
} 

?> 

Si no desea mostrar los números después del punto decimal, sólo tiene que añadir round($s); al principio de la función secondsToTime().

+0

No leyó la pregunta correctamente. No quiere medir el tiempo de ejecución de su script, sino un intervalo de tiempo arbitrario. –

+0

Me consta que podría ser engañoso, pero no estoy pidiendo una evaluación comparativa, sino el cálculo de una diferencia de tiempo simple. Piense en, digamos, una duración de viaje, una carrera, o algo así –

+0

Lo siento, probablemente tuve que añadir que la página se actualiza cada segundo para mostrar el nuevo tiempo transcurrido, así que tengo que usar mi método anterior. Mis disculpas por no explicar correctamente. – Wilest

7

Mantenga un registro de su tiempo usando la función 'time()'. Más adelante puede convertir 'time()' a otros formatos.

$_SESSION['start_time'] = time(); 

$end_time = time(); 

$end_time - $_SESSION['start_time'] = 65 seconds (divide by 60 to get minutes) 

Y luego puedes comparar eso con otro valor más adelante.

Use microtime si necesita detalles en milisegundos.

+0

También asegúrese de verificar la función PHP date(). [link] (http://php.net/manual/en/function.date.php) – donutdan4114

20

Usando PHP >= 5.3 podría utilizar DateTime y su método DateTime::diff(), que devuelve un objeto DateInterval:

$first = new DateTime('11:35:20'); 
$second = new DateTime('12:00:45'); 

$diff = $first->diff($second); 

echo $diff->format('%H:%I:%S'); // -> 00:25:25 
+1

'$ first = new DateTime ($ _ SESSION ['h']. ':'. $ _ SESSION ['m'] . ':'. $ _ SESSION ['s']); 'funciona para crear un objeto DateTime a partir de los datos de sesión dados. – Duroth

+0

desafortunadamente estoy usando php 5.2.6 – Wilest

0

que se pueden implementar las soluciones de muestra, pero me gusta usar la phptimer class (u otras personas, esta rueda ha sido inventado algunas veces). La ventaja es que, por lo general, puede definir el temporizador para que esté activo o no, lo que le permite dejar las llamadas del temporizador en su código para referencia posterior sin necesidad de volver a introducir todos los puntos de tiempo.

Cuestiones relacionadas