Foros del Web » Programando para Internet » PHP »

Edad exacta con php

Estas en el tema de Edad exacta con php en el foro de PHP en Foros del Web. Saludos amigos. Tengo una dificultad alguien sabe como calcular la edad exacta de una persona a traves de su fecha de nacimiento tengo un campo ...
  #1 (permalink)  
Antiguo 02/02/2007, 17:54
Avatar de El_Aprendiz  
Fecha de Ingreso: febrero-2005
Mensajes: 152
Antigüedad: 19 años, 2 meses
Puntos: 0
Edad exacta con php

Saludos amigos.

Tengo una dificultad alguien sabe como calcular la edad exacta de una persona a traves de su fecha de nacimiento tengo un campo de tipo DATE en una tabla donde tengo la fecha de nacimiento.
por ejemplo

Si una persona nacio el 24 de mayo de1997 entonces debe de imprimirme la edad exacta que seria 9 años, ya que aun no ha cumplido los 10 años si no hasta en mayo del 2007.

Puede hacerse con php?

Gracias de antemano...
__________________
La verdadera grandeza no está en no caer, si no en levantarse cada vez que caemos.
  #2 (permalink)  
Antiguo 02/02/2007, 22:47
 
Fecha de Ingreso: mayo-2005
Mensajes: 72
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Edad exacta con php

puedes hacerlo de esta forma,

Código PHP:
$fecha1 explode("-","1980-01-01"); // fecha nacimiento
$fecha2 explode("-",date("Y-m-d")); // fecha actual

$Edad $fecha2[0]-$fecha1[0];
if(
$fecha2[1]<=$fecha1[1] and $fecha2[2]<=$fecha1[2]){
$Edad $Edad 1;
}
print 
$Edad// debe tener 27 
__________________
Diseñador Gráfico / Programador PHP / Cisco Certified Network Associate (CCNA) / CSS / Java Scripting / SQL / C-Scripting / Entre otros...

:cool:
BOX
  #3 (permalink)  
Antiguo 03/02/2007, 09:46
Avatar de El_Aprendiz  
Fecha de Ingreso: febrero-2005
Mensajes: 152
Antigüedad: 19 años, 2 meses
Puntos: 0
Re: Edad exacta con php

Excelente Boxy funciona te doy las gracias... muy agradecido
__________________
La verdadera grandeza no está en no caer, si no en levantarse cada vez que caemos.
  #4 (permalink)  
Antiguo 03/04/2007, 10:57
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Edad exacta con php

Hola a todos, tengo una duda, tengo varios inputs en una pagina PHP, donde lleno los datos, como podria hacer que despues de haber introducido la edad, en el input siguiente se llene automaticamente la edad??? (Haciendo el calculo anteriormente mencionado)

Es posible eso??
  #5 (permalink)  
Antiguo 03/04/2007, 11:05
 
Fecha de Ingreso: noviembre-2006
Mensajes: 146
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: Edad exacta con php

Prueba:

Código PHP:
$edad=$_GET["edad"];
echo 
"<input name='Edad' type='text' value='".$edad."'>"
  #6 (permalink)  
Antiguo 04/04/2007, 11:56
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Edad exacta con php

$edad=$_GET["edad"]; de donde obtenemos edad?

Tal vez no me explique bien, resulta que tengo un formulario en una pagina PHP con varios campos de textfield (text inputs)... y el momento que voy llenandolos, llego a lo que es fecha de nacimiento, el siguiente text input es edad, lo que queria es llenar fecha de nacimiento y cuando haga click en el text input siguiente (edad), se llene automaticamente con la edad calcula a partir de fecha de nacimiento, en ese mismo momento e instante...

Creo que tengo que crearme una funcion... podria ser con JavaScript... es solo que no se mucho de eso.. pero investigare...

Si alguien podria ayudarme agradezco...

Por cierto, gracias NEXUS por tu respuesta.... pero creo que sin eventos previos no podria realizar en calculo en la misma pagina...
  #7 (permalink)  
Antiguo 07/04/2007, 07:59
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Edad exacta con php

Estuve viendo por ahi, y encontrer 2 funcion y una operacion para calcular la edad, una es en JavaScript:
Código:
//calcular la edad de una persona 
//recibe la fecha como un string en formato español 
//devuelve un entero con la edad. Devuelve false en caso de que la fecha sea incorrecta o mayor que el dia actual 
function calcular_edad(fecha){ 

    //calculo la fecha de hoy 
    hoy=new Date() 
    //alert(hoy) 

    //calculo la fecha que recibo 
    //La descompongo en un array 
    var array_fecha = fecha.split("/") 
    //si el array no tiene tres partes, la fecha es incorrecta 
    if (array_fecha.length!=3) 
       return false 

    //compruebo que los ano, mes, dia son correctos 
    var ano 
    ano = parseInt(array_fecha[2]); 
    if (isNaN(ano)) 
       return false 

    var mes 
    mes = parseInt(array_fecha[1]); 
    if (isNaN(mes)) 
       return false 

    var dia 
    dia = parseInt(array_fecha[0]); 
    if (isNaN(dia)) 
       return false 


    //si el año de la fecha que recibo solo tiene 2 cifras hay que cambiarlo a 4 
    if (ano<=99) 
       ano +=1900 

    //resto los años de las dos fechas 
    edad=hoy.getYear()- ano - 1; //-1 porque no se si ha cumplido años ya este año 

    //si resto los meses y me da menor que 0 entonces no ha cumplido años. Si da mayor si ha cumplido 
    if (hoy.getMonth() + 1 - mes < 0) //+ 1 porque los meses empiezan en 0 
       return edad 
    if (hoy.getMonth() + 1 - mes > 0) 
       return edad+1 

    //entonces es que eran iguales. miro los dias 
    //si resto los dias y me da menor que 0 entonces no ha cumplido años. Si da mayor o igual si ha cumplido 
    if (hoy.getUTCDate() - dia >= 0) 
       return edad + 1 

    return edad 
}
y otra en PHP:

Código PHP:
<?php

// Calcula la edad (formato: año/mes/dia)
function edad($edad){
list(
$anio,$mes,$dia) = explode("-",$edad);
$anio_dif date("Y") - $anio;
$mes_dif date("m") - $mes;
$dia_dif date("d") - $dia;
if (
$dia_dif || $mes_dif 0)
$anio_dif--;
return 
$anio_dif;
}

?>
La edad es <?=edad("1992-03-06");?>
Y la operacion:

Código PHP:
$fecha1 explode("-","1980-01-01"); // fecha nacimiento 
$fecha2 explode("-",date("Y-m-d")); // fecha actual 

$Edad $fecha2[0]-$fecha1[0]; 
if(
$fecha2[1]<=$fecha1[1] and $fecha2[2]<=$fecha1[2]){ 
$Edad $Edad 1

print 
$Edad// debe tener 27 
Ambas son correctas, pero no se como usarlas para hacer el calculo inmediato con eventos de click del mouse, bueno eso se me ocurre para calcular la edad en la misma pagina sin cargar nada solo haciendo click en el textfield siguiente que es el de edad. Pense hacerlo con el onClick del textfield, pero creo que solo puede recibir metodos de JS sin variables, pense tambien poner el proceso en el value, pero para ello definitivamente tengo que hacer un evento adicional para que realice el calculo....

Bueno, no se me ocurre otra cosa... trate con lo mas simple, definir variables hidden y luego hacer el simple calculo de fechas en el textfield, pero tampoco.

Alguien sabe?? Como podria pasarle el valor de una variable a una funcion de JS???

Última edición por makeitslow; 15/04/2007 a las 20:20
  #8 (permalink)  
Antiguo 19/04/2007, 11:36
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Edad exacta con php

Alguien sabe?? Tal vez es por que no se puede pasar variables en tiempo real a una funcion???
  #9 (permalink)  
Antiguo 19/04/2007, 11:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Edad exacta con php

Si se puede pasar, tienes dos rutas, si el calculo lo quieres hacer en PHP, necesitas AJAX para enviar y recibir los datos, si lo haces en Javascript ps solo usa el onblur() de tu caja de texto e imprimes la edad, ahi ya tu mismo tienes la funcion en JavaScript

Te dejo un ejemplo: (ojo necesitas la libreria prototype.js)
Código:
<script type="text/javascript">
function calculaEdad() {
      var fecha = $F('cboFecha');
      var edad = calcular_edad( fecha );
      $('txtEdad').value = edad;
}
</script>
<input type="text" name="cboFecha" id="cboFecha" size="10" />
<input type="text" name="txtEdad" id="txtEdad" onblur="calculaEdad();" />
  #10 (permalink)  
Antiguo 20/04/2007, 08:50
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Edad exacta con php

Gracias GatorV, voy a probarlo! Muchisimas gracias!!!
  #11 (permalink)  
Antiguo 21/04/2007, 12:14
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Edad exacta con php

Hola GatoV, te comento que probe el codigo y no me resulta, me bota un error en la pagina... o sea carga todo belleza pero el momento de hacer click en el campo edad no da nada.... y sale el icono en la parte inferior de la pantalla en la barra de estado, de error en la pagina.

Lo probe en un pagina PHP solitaria asi:

Código PHP:
<script type="text/javascript" src="scriptaculous.js"></script>

<script type="text/javascript">
function calculaEdad() {
      var fecha = $F('cboFecha');
      var edad = calcular_edad( fecha );
      $('txtEdad').value = edad;
}
</script>
<input type="text" name="cboFecha" id="cboFecha" size="10" />
<input type="text" name="txtEdad" id="txtEdad" onblur="calculaEdad();" /> 
Y nada, el archivo scriptacoulos lo tengo ahi mismo donde esta la pagina asi que no deberia ser ese el problema....

Sabes que puede estar fallando??
Tal vez las fechas?? Ya he intentado probar con:

01-01-1980
01/01/1980
01-01-80
01/01/80

Y nada.... Espero tu respuesta, muchas gracias!
  #12 (permalink)  
Antiguo 28/05/2007, 13:10
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Edad exacta con php

Hola a todos de nuevo!!!

Bueno, despues de tanto tiempo, opte por usar la funcion PHP que mencione mas arriba.. pero tengo un problema.. .como capturo el valor ingresado en el momento que es escrito?? Creo que ese es mi principal problema para cualquier funcion y todo eso...

Tengo mi archivo NUEVOCARNET.PHP donde se encuentran 3 campos para recibir la fecha de nacimiento:

Código PHP:
PARA EL DIA:
<
select name="dianaccs" size="1">
<
option value="01">1</option>
<
option value="02">2</option>
.
.
</
selec>


PARA EL MES:
<
select name="mesnaccs" size="1">
<
option value="01">Enero</option>
<
option value="02">Febrero</option>
.
.
</
select>

Y PARA EL AÑO:
<
input name="añonaccs" type="text" size="5" maxlength="4"
Como optengo sus valores en mi misma pagina (NUEVOCARNET.PHP)????

He intentado con GET y POST:

Código PHP:
$dianaccs=$_GET["dianaccs"];
$mesnaccs=$_GET["mesnaccs"];
$añonaccs=$_GET["añonaccs"]; 
Pero no resulta, si lograra tener sus valores en ese momento puedo mandarlo como parametro a cualquier funcion en el onClick o onBlur de otro INPUT TEXT para calcular la edad instantanemante.

Alguien sabe?? Gracias!!

PD.: Que diferencia hay con el onClick y con el onBlur????
  #13 (permalink)  
Antiguo 03/06/2007, 13:10
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Edad exacta con php

Hola de nuevo a todos... creo que solucione mi problema o tal vez me estoy cag.....me mas mi existencia.....

Quisiera saber si alguien puede ayudarme en mi nuevo dilema.... y a ver si alguien le sirve para calcular la edad con un simple click.

Tengo un SELECT para los dias:
Código PHP:
<select name="dianaccs" size="1">
<
option value="01">1</option>
<
option value="02">2</option>
.
.
.
</
select
Tengo un SELECT para los meses:
Código PHP:
<select name="mesnaccs" size="1">
<
option value="01">Enero</option>
<
option value="02">Febrero</option>
.
.
.
</
select
Y tengo un TEXT INPUT para el año (Solo recibe 2 digitos y no permite escribir otras letras que no sean numeros):
Código PHP:
<input name="anonaccs" type="text" size="5" maxlength="2"
onKeyPress=
"if (event.keyCode<45||event.keyCode>57)event.returnValue=false;"
Ahora tengo la funcion en Java Script para calcular la edad que anteriormente la coloque en este tema de alguien que lo implemento:
Código HTML:
function calcular_edad()
{ 
//Obtengo los valores escogidos en los SELECTS y el INPUT anterior 
que estan en un formulario FORM1
var ano = document.form1.añonaccs.value; 
var mes = document.form1.mesnaccs.value; 
var dia = document.form1.dianaccs.value; 

//Calculo la fecha de hoy 
hoy=new Date() 

//Como la el año de la fecha esta en 2 digitos la cambio a 4 digitos
ano +=1900 

//Resto los años de las dos fechas 
edad=hoy.getYear()- ano - 1; 

//Si resto los meses y me da menor que 0 entonces no ha cumplido años. 
Si da mayor si ha cumplido.
if (hoy.getMonth() + 1 - mes < 0)
return edad 

if (hoy.getMonth() + 1 - mes > 0)
return edad+1 

//Si resto los dias y me da menor que 0 entonces no ha cumplido años. 
Si da mayor o igual si ha cumplido 
if (hoy.getUTCDate() - dia >= 0)
return edad + 1 

return edad 
}
Hasta aqui ya tengo la edad calcula exactamente, ahora lo paso a un evento de otro INPUT TEXT que seria el de la edad, que se calcula y muestra inmediatamente haciendo click en este INPUT:
Código PHP:
<input name="edadcs" type="text" size="5"
onClick="this.form.edadcs.value=calcular_edad()"
Suena perfecto no??? Pero NO!

Todo corre belleza pero tengo los siguientes problemas:

1. No estoy obteniendo los valores de los SELECTS, el valor del INPUT si se captura en su variable correspondiente.

2. He tratado de simplificar la funcion haciendo solo calculos con el AÑO, pero la resta del AÑO DE HOY y el AÑO DE NACIMIENTO siempre me da un numero inmensamente grande y de paso negativo. Si calculo con el año 00 (O sea 1900) me da que la edad es 106.

3. Ya estoy aburrido.

Última edición por makeitslow; 03/06/2007 a las 13:17
  #14 (permalink)  
Antiguo 04/06/2007, 08:29
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Edad exacta con php

Solucionado el punto 1.

Para obtener los valores seleccionados de un select, solo hay que hacer referencia al indice que se ha seleccionado y a partir de este obtener el valor.
  #15 (permalink)  
Antiguo 04/06/2007, 08:35
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Edad exacta con php

Solucionado el problema.

Para obtener los valores seleccionados de un select, solo hay que hacer referencia al indice que se ha seleccionado y a partir de este obtener el valor.

Tenemos un SELECT:
Código PHP:
<select name="mesnaccs" size="1"
<
option value="01">Enero</option
<
option value="02">Febrero</option



</
select
Y para tener su valor en Java Script hacemos lo siguiente:

Código HTML:
var indice = document.form1.mesnaccs.selectedIndex;
var mes = document.form1.mesnaccs.options[indice].value;
De esta forma tenemos en la variable MES el valor del SELECT que hemos escogido.

Bueno, ahora para el que le interese le dejo el codigo y la funcion para CALCULAR AUTOMATICAMENTE E INMEDIATAMENTE LA EDAD A PARTIR DE LA FECHA DE NACIMIENTO HACIENDO UN CLICK EN EL CAMPO.

CONSIDERACIONES:

1. Tenemos 2 MENU SELECT, uno para los dias (diannac) y otro para los meses (mesnac).
2. Tenemos 2 INPUT TEXT, uno para el año de 2 digitos (anonac) y otro para la edad (edad).
3. Todo esta dentro de un formulario (FORM1).

Funcion Java Script que calcula la edad:

Código HTML:
<script language="JavaScript">

function calcular_edad()
{ 
    var indiced = document.form1.dianac.selectedIndex; 
    var dia = document.form1.dianac.options[indiced].value; 

    var indicem = document.form1.mesnac.selectedIndex; 
    var mes = document.form1.mesnacs.options[indicem].value;

    var ano = document.form1.anonac.value; 
    ano = parseInt(ano);
			
    //Calculo la fecha de hoy 
    hoy = new Date(); 
	    
    //El año de la fecha que recibo solo tiene 2 cifras hay que cambiarlo a 4 
    ano = 1900 + ano;

    //Resto los años de las dos fechas 
    //-1 porque no se si ha cumplido años ya este año 
    edad = hoy.getYear()- ano - 1; 
    
    //Si resto los meses y me da menor que 0 entonces no ha cumplido años. 
    //Si da mayor si ha cumplido 
    //+ 1 porque los meses empiezan en 0 
    if ( hoy.getMonth() + 1 - mes < 0) 
       return edad 
	   
    if ( hoy.getMonth() + 1 - mes > 0) 
       return edad+1 

    //Si resto los dias y me da menor que 0 entonces no ha cumplido años. 
    //Si da mayor o igual si ha cumplido 
    if ( hoy.getUTCDate() - dia >= 0) 
       return edad + 1 

    return edad
} 
</script> 
La funcion va al principio, luego vienen los campos SELECT e INPUT TEXT.

El INPUT TEXT para la EDAD tiene que estar asi:

Código PHP:
<input name="edad" type="text" size="5"
onClick="this.form.edad.value=calcular_edad()"
Y listo, cada vez que pongamos una edad escogiendo el dia y el mes de los SELECT y escribiendo los 2 digitos de la fecha de nacimiento, al hacer click en el campo de EDAD aparecera automaticamente la edad que la persona con esa fecha de nacimiento, sin recargar la pagina ni hacer un SUBMIT ni nada.

Podemos tambien poner en lugar de onClick del TEXT INPUT, onFocus, asi no solo se calculara automaticamente al hacer click, si no tambien cuando hagamos TAB o cuando aparezca el cursor en dicho TEXT INPUT.

PD.: Alguien podria borrar mis anteriores mensajes publicados de este tema?? Es que creo que me excedi y redunde mucho preguntando.... Gracias!

Última edición por makeitslow; 05/06/2007 a las 09:00 Razón: Solucion al problema.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 12:07.