Edad de una persona en años, meses y días con PHP

Daniel M. Maldonado el 09/06/2010 con 2 Comentarios

Esta clase en PHP determina la edad de una persona en años, meses y días teniendo en cuenta años bisiestos. La lógica pasa por hacer una diferencia directa entre la fecha actual y la fecha de nacimiento y realizar un ajuste en caso de que los valores de los meses y/o días den negativo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?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;
    }
}
?>

Podemos hacer uso de la misma, de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
<?php
//$fActual = date('d/m/Y');
$fActual = '30/05/2010';
$fNacimiento = '20/10/2000';
$edad = new edadAMD($fActual,$fNacimiento);
$tiempo = $edad->calcularEdad();
echo "Fecha Actual: $fActual
Fecha de Nacimiento: $fNacimiento
Usted tiene $tiempo[0] años, $tiempo[1] meses y $tiempo[2] dias"
;
?>

La url en pastebin.org es: http://www.pastebin.org/296286

Fuente | LaREPAWEB


Tec. Informático, Analista en Sistema y Estudiante de Ing. en computación, Emprendedor, Creador y Webmaster de LaREPAWEB, El CoDiGo K, TeknoFlash, SQLite Latino.

De momento hay 2 comentarios ¿Quieres dejar el tuyo?

  1. Información Bitacoras.com…

    Valora en Bitacoras.com: Esta clase en PHP determina la edad de una persona en años, meses y días teniendo en cuenta años bisiestos. La lógica pasa por hacer una diferencia directa entre la fecha actual y la fecha de nacimiento y realizar un ajuste e…..

Leave a Reply

*

web stats