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.