Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/03/2010, 18:53
Avatar de De_la_Cuesta_13
De_la_Cuesta_13
 
Fecha de Ingreso: abril-2009
Ubicación: Cali, Colombia.
Mensajes: 265
Antigüedad: 15 años, 7 meses
Puntos: 14
[APORTE] Sumar y restar horas

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.
__________________
Sólo quien nunca nada hace, nunca se equivoca.