<?php
/*
Programa: Determinar la edad de una persona en años, meses y dias
Version: 0.1
Fecha: 30 May 2010
Autor: Luis Chavez
Mail: lchavez@larepaweb.com.ar
Web: www.larepaweb.com.ar
Pastebin: http://www.pastebin.org/296286
*/
class edadAMD{
private $fActual;
private $fNacimiento;

function __construct($fActual, $fNacimiento){
$this->fActual = $fActual;
$this->fNacimiento = $fNacimiento;
}

private function bisiesto($anio){
return checkdate(2,29,$anio) ? true : false;
}

private function validar(){
//validar el formato y que la fecha de nacimiento sea menor que la actual
if(!isset($this->fActual)||!isset($this->fNacimiento)){
echo ‘No se definieron las fechas’;
return false;
}
return true;
}

function calcularEdad(){

if(!$this->validar()){
return false;
}

$anacimiento = explode ( “/”, $this->fNacimiento);
$aactual = explode ( “/”, $this->fActual);

$anios =  $aactual[2] – $anacimiento[2];
$meses = $aactual[1] – $anacimiento[1];
$dias =  $aactual[0] – $anacimiento[0];

if ($meses < 0){
–$anios;
$meses =  ($aactual[1] + 12) – $anacimiento[1];
}

if ($dias < 0){
–$meses;
//array con la cantidad de dias por mes
$ameses = array(1=>31, 2=>28, 3=>31, 4=>30, 5=>31, 6=>30, 7=>31, 8=>31, 9=>30, 10=>31, 11=>30, 12=>31);
$mAnterior = $aactual[1] – 1;

if($mAnterior>0 && $mAnterior<>2){
$dmAnterior = $ameses[$mAnterior];
}
elseif($mAnterior == 2){
//si el mes es febrero controlar si el año es bisiesto
($this->bisiesto($aactual[2])) ? $dmAnterior = 29 : $dmAnterior = $ameses['2'];
}
else{
//para el caso de que 01 (enero)-1 sea igual a 0 correspondería a diciembre del año anterior
$dmAnterior = $ameses['12'];
}
$dias =  ($aactual[0] + $dmAnterior) – $anacimiento[0];
}

$edad[0] = $anios;
$edad[1] = $meses;
$edad[2] = $dias;

return $edad;
}
}
?>