Foros del Web » Programando para Internet » PHP »

Diferencia entre dos fechas

Estas en el tema de Diferencia entre dos fechas en el foro de PHP en Foros del Web. Muy wenas! Aqui os dejo esta funcion por si alguien, necesita algo parecido: Es una funcion que pasandole dos parametros de fecha con formato (Y-m-d ...
  #1 (permalink)  
Antiguo 14/01/2009, 09:33
 
Fecha de Ingreso: diciembre-2006
Mensajes: 53
Antigüedad: 19 años, 11 meses
Puntos: 0
Diferencia entre dos fechas

Muy wenas!

Aqui os dejo esta funcion por si alguien, necesita algo parecido: Es una funcion que pasandole dos parametros de fecha con formato (Y-m-d H:i:s) te devuelve la diferencia entre ambas, en años, meses, dias, horas, minutos, segundos, respetando los meses con diferente numero de dias y años bisiestos:

si alguno le encontrais algun fallo por favor dadme un toque.

Código PHP:
function timeBetween($desde,$hasta) {
    
$ini = explode(" ",$desde);
    
$fIni = $ini[0];
    
$hIni = $ini[1];
    
$fIni = explode("-",$fIni);
    
$hIni = explode(":",$hIni);

    
$fin = explode(" ",$hasta);
    
$fFin = $fin[0];
    
$hFin = $fin[1];
    
$fFin = explode("-",$fFin);
    
$hFin = explode(":",$hFin);

    
$anos = $fFin[0] - $fIni[0];
    
$meses = $fFin[1] - $fIni[1];
    
$dias = $fFin[2] - $fIni[2];
    
$horas = $hFin[0] - $hIni[0];
    
$minutos = $hFin[1] - $hIni[1];
    
$segundos = $hFin[2] - $hIni[2];
    
    if (
$segundos < 0) {
        
$minutos--;
        
$segundos = 60 + $segundos;
    }
    if (
$minutos < 0) {
        
$horas--;
        
$minutos = 60 + $minutos;
    }
    if (
$horas < 0) {
        
$dias--;
        
$horas = 24 + $horas;
    }
    if (
$dias < 0)
    {
        --
$meses;
        switch (
$fIni[1]) {
            case 
1:     $dias_mes_anterior=31; break;
            case 
2:     $dias_mes_anterior=31; break;
            case 
3:
                if (
checkdate(2,29,$fIni[0]))
                {
                    
$dias_mes_anterior=29; break;
                } else {
                    
$dias_mes_anterior=28; break;
                }
            case 
4:     $dias_mes_anterior=31; break;
            case 
5:     $dias_mes_anterior=30; break;
            case 
6:     $dias_mes_anterior=31; break;
            case 
7:     $dias_mes_anterior=30; break;
            case 
8:     $dias_mes_anterior=31; break;
            case 
9:     $dias_mes_anterior=31; break;
            case 
10:     $dias_mes_anterior=30; break;
            case 
11:     $dias_mes_anterior=31; break;
            case 
12:     $dias_mes_anterior=30; break;
        }

        
$dias=$dias + $dias_mes_anterior;
    }
    if (
$meses < 0)
    {
        --
$anos;
        
$meses = $meses + 12;
    }
    return array(
"años" => $anos,
                
"meses" => $meses,
                
"dias" => $dias,
                
"horas" => $horas,
                
"minutos" => $minutos,
                
"segundos" => $segundos);
} 

un saludo!!
agur
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:28.