Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/01/2009, 09:33
perikobermio
 
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