Compañeros a continuación dejo las funciones para sumar y restar horas en PHP. La verdad que busqué y busqué en la web (e incluso aquí en foros del web), pero encontraba aproximaciones de lo que realmente esperaba, es decir, funcionan hasta cierto punto las funciones, pero si cambias unas cositas: dejan de funcionar o muestran errores.
NOTA: Aclarar que la matemática para la suma y resta de horas la saque de
http://www.aaamatematicas.com/. Así que lo que hice fue pasar eso a PHP y adicionar/mejorar ciertos aspectos que ellos no mencionan y que son muy importantes.
Restar Horas
funct_restar_horas.php -> Será el nombre del archivo que incluirá la función.
Código PHP:
/*
* Original de: http://www.aaamatematicas.com/subtsbhm.htm
*/
##Función que resta horas
function restar_horas ($hora1,$hora2){
$temp1 = explode(":",$hora1);
$temp_h1 = (int)$temp1[0];
$temp_m1 = (int)$temp1[1];
$temp_s1 = (int)$temp1[2];
$temp2 = explode(":",$hora2);
$temp_h2 = (int)$temp2[0];
$temp_m2 = (int)$temp2[1];
$temp_s2 = (int)$temp2[2];
// si $hora2 es mayor que la $hora1, invierto
if( $temp_h1 < $temp_h2 ){
$temp = $hora1;
$hora1 = $hora2;
$hora2 = $temp;
}
/* si $hora2 es igual $hora1 y los minutos de
$hora2 son mayor que los de $hora1, invierto*/
elseif( $temp_h1 == $temp_h2 && $temp_m1 < $temp_m2){
$temp = $hora1;
$hora1 = $hora2;
$hora2 = $temp;
}
/* horas y minutos iguales, si los segundos de
$hora2 son mayores que los de $hora1,invierto*/
elseif( $temp_h1 == $temp_h2 && $temp_m1 == $temp_m2 && $temp_s1 < $temp_s2){
$temp = $hora1;
$hora1 = $hora2;
$hora2 = $temp;
}
$hora1=explode(":",$hora1);
$hora2=explode(":",$hora2);
$temp_horas = 0;
$temp_minutos = 0;
//resto segundos
$segundos;
if( (int)$hora1[2] < (int)$hora2[2] ){
$temp_minutos = -1;
$segundos = ( (int)$hora1[2] + 60 ) - (int)$hora2[2];
}
else
$segundos = (int)$hora1[2] - (int)$hora2[2];
//resto minutos
$minutos;
if( (int)$hora1[1] < (int)$hora2[1] ){
$temp_horas = -1;
$minutos = ( (int)$hora1[1] + 60 ) - (int)$hora2[1] + $temp_minutos;
}
else
$minutos = (int)$hora1[1] - (int)$hora2[1] + $temp_minutos;
//resto horas
$horas = (int)$hora1[0] - (int)$hora2[0] + $temp_horas;
if($horas<10)
$horas= '0'.$horas;
if($minutos<10)
$minutos= '0'.$minutos;
if($segundos<10)
$segundos= '0'.$segundos;
$rst_hrs = $horas.':'.$minutos.':'.$segundos;
return ($rst_hrs);
}
Su uso
restar_horas.php -> Será el fichero que usaremos como demo.
Código PHP:
include("funct_restar_horas.php");
//restar horas, minutos y segundos
echo restar_horas("12:35:41","10:37:53").'<br/>';
echo restar_horas("10:37:53","12:35:41").'<br/>';
//restar horas y minutos -> no es necesario ingresar
echo restar_horas("08:15","12:45").'<br/>';
echo restar_horas("12:45","08:15").'<br/>';
# No es necesario ingresar en orden las fechas, el script se encarga de ello. :)
Sumar Horas
funct_suma_horas.php -> Será el fichero que incluirá la función.
Código PHP:
/*
* Original de: http://www.aaamatematicas.com/addthrpm.htm
*/
##Función que suma horas
function suma_horas ($hora1,$hora2){
$hora1=explode(":",$hora1);
$hora2=explode(":",$hora2);
$temp=0;
//sumo segundos
$segundos=(int)$hora1[2]+(int)$hora2[2];
while($segundos>=60){
$segundos=$segundos-60;
$temp++;
}
//sumo minutos
$minutos=(int)$hora1[1]+(int)$hora2[1]+$temp;
$temp=0;
while($minutos>=60){
$minutos=$minutos-60;
$temp++;
}
//sumo horas
$horas=(int)$hora1[0]+(int)$hora2[0]+$temp;
if($horas<10)
$horas= '0'.$horas;
if($minutos<10)
$minutos= '0'.$minutos;
if($segundos<10)
$segundos= '0'.$segundos;
$sum_hrs = $horas.':'.$minutos.':'.$segundos;
return ($sum_hrs);
}
Su uso
sumar_horas.php -> Fichero demo.
Código PHP:
include("funct_suma_horas.php");
echo suma_horas("08:15","12:45").'<br/>';
echo suma_horas("18:15:17","06:45:48").'<br/>';
Eso ha sido todo compañeros, espero comentarios.
Saludos,
De la Cuesta.