Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/01/2009, 09:33
perikobermio
 
Fecha de Ingreso: diciembre-2006
Mensajes: 53
Antigüedad: 17 años, 4 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