> Manuales > Taller de PHP

Función que nos permite averiguar las horas o minutos entre dos tiempos dados de un mismo día.

Se trata de una función que nos permite obtener El total de Minutos u Horas transcurridas entre dos Tiempos de un mismo día.

Algo como:
Hora 1= 13:56
Hora 2=18:07
La función Imprime: Han transcurrido 04:11 Horas.

El proceso es muy sencillo, veamos el código fuente:

<? function calcular_tiempo_trasnc($hora1,$hora2){
    $separar[1]=explode(':',$hora1);
    $separar[2]=explode(':',$hora2);

$total_minutos_trasncurridos[1] = ($separar[1][0]*60)+$separar[1][1];
$total_minutos_trasncurridos[2] = ($separar[2][0]*60)+$separar[2][1];
$total_minutos_trasncurridos = $total_minutos_trasncurridos[1]-$total_minutos_trasncurridos[2];
if($total_minutos_trasncurridos<=59) return($total_minutos_trasncurridos.' Minutos');
elseif($total_minutos_trasncurridos>59){
$HORA_TRANSCURRIDA = round($total_minutos_trasncurridos/60);
if($HORA_TRANSCURRIDA<=9) $HORA_TRANSCURRIDA='0'.$HORA_TRANSCURRIDA;
$MINUITOS_TRANSCURRIDOS = $total_minutos_trasncurridos%60;
if($MINUITOS_TRANSCURRIDOS<=9) $MINUITOS_TRANSCURRIDOS='0'.$MINUITOS_TRANSCURRIDOS;
return ($HORA_TRANSCURRIDA.':'.$MINUITOS_TRANSCURRIDOS.' Horas');

} }
//llamamos la función e imprimimos
echo calcular_tiempo_trasnc(date('H:i'),'16:12');
?>


Explicando:

Primero definiremos una función para no repetir el mismo código en todas las partes donde lo utilizaremos, De nombre calcular_tiempo_trasnc($hora1,$hora2);

Donde: $hora1 es la hora mayor desde donde se calculara; en el ejemplo anterior seria 18:07, Y $hora2 es el punto desde donde se calculara las horas y minutos transcurridos.

Cabe destacar que ambas horas deben estar en el siguiente formato: ( H: i) .
Como ya sabemos “H” es la hora de 00 a 23 e “i”, Los minutos de 00 a 59 parámetros definidos para la función date();

Luego asignamos valor a las matrices $separar[1] y $separar[2] respectivamente con el resultado devuelto por la función explode(); encargada de separar una cadena a partir de un valor, en este caso será : (dos puntos) devolviendo una nueva matriz con dos partes, donde:

$separar[1][0] <= Es la hora de $hora1. Si el valor de $hora1 es igual a (11:15), entonces $separar[1][0] es igual a “11”;
Y $separar[1][1] <= Los minutos de $hora 1, igual a 15.

Donde el primer [1], es el Key o la clave de $separar, y correspondiente a la $hora1, si fuese 2, seria la $hora2. Y hasta allí porque solo están definidos 2 parámetros.

Pasaremos los valores de $separar[1][0] y $separar[2][0] respectivamente de horas a minutos ( Multiplicando ese valor por 60 ) que son los minutos de una hora.

$separar[1][0]*60

Para Luego sumarle los minutos devueltos por $separar[1][1] y $separar[2][1] respectivamente, De este modo obtenemos el valor global de los minutos transcurridos en ambas horas. Los resultados los agruparemos en $total_minutos_trasncurridos[1] y $total_minutos_trasncurridos[2].

El paso siguiente es asignarle el valor de la resta entre $total_minutos_trasncurridos[1] y $total_minutos_trasncurridos[2] a la variable $total_minutos_trasncurridos.

Ya tenemos la diferencia en Minutos de ambos cortes de horas. Ahora debemos darle un formato legible y entendible.

Iniciamos una condición donde decimos: Si $total_minutos_trasncurridos es menor o igual a 59( if($total_minutos_trasncurridos<=59)) quiere decir que aun no ha transcurrido 1 hora , por lo tanto retornamos (return($total_minutos_trasncurridos.' Minutos')), que nos es más que el mensaje que devolverá toda la función cuando se llame.

De lo contrario si (elseif($total_minutos_trasncurridos>59)) $total_minutos_trasncurridos es mayor que 59, entonces si ha transcurrido al menos 1 hora y ejecutamos las siguientes instrucciones:
Llevaremos los minutos a horas, dividiéndolo por 60 (minutos de una hora) y redondeamos el valor con round(); Ya tenemos la Hora, pero nos falta los minutos.

Para los minutos ($MINUITOS_TRANSCURRIDOS), obtendremos el residuo de la división entre $total_minutos_trasncurridos y 60 (minutos de una hora).

$MINUITOS_TRANSCURRIDOS=$total_minutos_trasncurridos%60

Ya tenemos los valores deseados.
Ahora indicaremos si el valor de $HORA_TRANSCURRIDA ó $MINUITOS_TRANSCURRIDOS es menor o igual que 9, para colocarle un cero a la izquierda. Por ejemplo: si $MINUITOS_TRANSCURRIDOS es igual a 9 entonces la condición evalúa TRUE y le coloca el 0 al comienzo, devolviendo 09.

El mismo proceso lo repetimos con $HORA_TRANSCURRIDA.

Finalmente retornamos el resultado:
return ($HORA_TRANSCURRIDA.':'.$MINUITOS_TRANSCURRIDOS.' Horas');

Cabe destacar que pueden adaptarle unas instrucciones para que cuando Los minutos sean igual a 1 diga (Minuto) y no (Minutos), igual que con las horas.

Para llamar la función: calcular_tiempo_trasnc(date('H:i'),'16:12');
Donde date('H:i'),es la hora actual del servidor y 16:12 desde donde se comienza a contar.

Emmanuel García De Caro

Webmaster de Blasten.com

Manual