Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/12/2006, 05:24
Avatar de holahola
holahola
 
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 19 años
Puntos: 1
Otro cálculo de edad (con años, meses y días) en php

Hola. Para una aplicación necesité obtener la edad con el formato de "Tengo x años, x meses y x días" y lo publico aquí, por si alguien lo necesita. Estoy convencido que esto ya existe en la red (de hecho, la base la tomé de algún sitio que ahora no recuerdo), pero como no lo encontré, lo publico en este estupendo foro.

Está basado en restar los años, meses y días, y se tiene en cuenta que tanto los meses como los días podrían dar negativo, para reajustarlos.

Código PHP:
<?php
$fecha_de_nacimiento 
"1948-05-11";
$fecha_actual date ("Y-m-d");
//$fecha_actual = date ("2006-03-05"); //para pruebas

echo "<br>Hoy es $fecha_actual";
echo 
"<br>Naciste el $fecha_de_nacimiento";

// separamos en partes las fechas
$array_nacimiento explode "-"$fecha_de_nacimiento );
$array_actual explode "-"$fecha_actual );

$anos =  $array_actual[0] - $array_nacimiento[0]; // calculamos años
$meses $array_actual[1] - $array_nacimiento[1]; // calculamos meses
$dias =  $array_actual[2] - $array_nacimiento[2]; // calculamos días

//ajuste de posible negativo en $días
if ($dias 0)
{
    --
$meses;

    
//ahora hay que sumar a $dias los dias que tiene el mes anterior de la fecha actual
    
switch ($array_actual[1]) {
           case 
1:     $dias_mes_anterior=31; break;
           case 
2:     $dias_mes_anterior=31; break;
           case 
3
                if (
bisiesto($array_actual[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;
}

//ajuste de posible negativo en $meses
if ($meses 0)
{
    --
$anos;
    
$meses=$meses 12;
}

echo 
"<br>Tu edad es: $anos años con $meses meses y $dias días";

function 
bisiesto($anio_actual){
    
$bisiesto=false;
    
//probamos si el mes de febrero del año actual tiene 29 días
      
if (checkdate(2,29,$anio_actual))
      {
        
$bisiesto=true;
    }
    return 
$bisiesto;
}
?>
Un saludo.