He realizado una función que calcula la edad de una persona y devuelve el resultado en años, meses y días, basada en una página que encontre en internet (http://www.forosdelweb.com/f18/otro-calculo-edad-con-anos-meses-dias-php-448497/) pero está función no esta del todo buena, ya que posee un problema al calcular este siguiente ejemplo:
Fecha Nacimiento: 31/03/2008.
Fecha Ejemplo: 02/03/2009.
Resultado: "Tu edad es: 0 años con 11 meses y -1 días"
Por lo tanto tomé esta función y le incorpore las siguientes líneas:
Código PHP :
...
if ($dias < 0)
{
--$meses;
if($dias == -1)
{
$dias = 30;
}
if($dias == -2)
{
$dias = 29;
}
}
...
Aquí les dejo las funciones correctas:
Código PHP :
<?php
# PARAMETROS:
# $fecha_nacimiento - Fecha de nacimiento de una persona.
#
# $fecha_control - Fecha actual o fecha a consultar.
#
#
# EJEMPLO:
# tiempo_transcurrido('22/06/1977', '04/05/2009');
#
function tiempo_transcurrido($fecha_nacimiento, $fecha_control)
{
$fecha_actual = $fecha_control;
if(!strlen($fecha_actual))
{
$fecha_actual = date('d/m/Y');
}
// separamos en partes las fechas
$array_nacimiento = explode ( "/", $fecha_nacimiento );
$array_actual = explode ( "/", $fecha_actual );
$anos = $array_actual[2] - $array_nacimiento[2]; // calculamos años
$meses = $array_actual[1] - $array_nacimiento[1]; // calculamos meses
$dias = $array_actual[0] - $array_nacimiento[0]; // 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[2]))
{
$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 ($dias < 0)
{
--$meses;
if($dias == -1)
{
$dias = 30;
}
if($dias == -2)
{
$dias = 29;
}
}
}
//ajuste de posible negativo en $meses
if ($meses < 0)
{
--$anos;
$meses=$meses + 12;
}
$tiempo[0] = $anos;
$tiempo[1] = $meses;
$tiempo[2] = $dias;
return $tiempo;
}
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;
}
?>
Para llamar a estas funciones solo deben hacer lo siguiente:
Código PHP :
<?php $fecha_nacimiento = "31/03/2008"; $fecha_control = "02/03/2009"; $tiempo = tiempo_transcurrido($fecha_nacimiento, $fecha_control); $texto = "$tiempo[0] años con $tiempo[1] meses y $tiempo[2] días"; print "edad: ".$texto."<br>"; ?>
Hasta luego.
