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);
}
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. :)
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);
}
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/>';
Saludos,
De la Cuesta.