Comunidad de diseño web y desarrollo en internet online

Cálculo de edad mostrado en años, meses y días.

Citar            
MensajeEscrito el 15 Jun 2009 03:52 pm
Hola a Todos,

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.

Por jfuentes3002

1 de clabLevel



Genero:Masculino  

msie8
Citar            
MensajeEscrito el 15 Jun 2009 05:31 pm
excelente aporte

Por talcual

686 de clabLevel



 

Colombia

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.