Foros del Web » Programando para Internet » Javascript »

fecha de nacimiento automatica con error ......

Estas en el tema de fecha de nacimiento automatica con error ...... en el foro de Javascript en Foros del Web. buenas tardes he buscado arduamente sobre como lograr la edad exacta de una persona en sabiendo el dia el mes y año de nacimiento para ...
  #1 (permalink)  
Antiguo 05/07/2011, 16:37
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 13 años
Puntos: 0
fecha de nacimiento automatica con error ......

buenas tardes he buscado arduamente sobre como lograr la edad exacta de una persona en sabiendo el dia el mes y año de nacimiento para esto encontre un ejemplo donde explican de manera coherente como obtenerla ....sin embargo no encuentro un error q me esta comiendo la cabeza ,al final el text donde deberia salir la edad me sale negativo y con 4 cifras........ aqui esta el ejemplo gracias de antemano

Código Javascript:
Ver original
  1. <script language="JavaScript">
  2.  
  3. function calcular_edad()
  4. {
  5.     var indiced = document.form1.dianac.selectedIndex;
  6.     var dia = document.form1.dianac.options[indiced].value;
  7.  
  8.     var indicem = document.form1.mesnacs.selectedIndex;
  9.     var mes = document.form1.mesnacs.options[indicem].value;
  10.  
  11.     var ano = document.form1.anonac.value;
  12.     ano = parseInt(ano);
  13.            
  14.     //Calculo la fecha de hoy
  15.     hoy = new Date();
  16.        
  17.     //El año de la fecha que recibo solo tiene 2 cifras hay que cambiarlo a 4
  18.     ano = 1900 + ano;
  19.  
  20.     //Resto los años de las dos fechas
  21.     //-1 porque no se si ha cumplido años ya este año
  22.     edad = hoy.getYear()- ano - 1;
  23.    
  24.     //Si resto los meses y me da menor que 0 entonces no ha cumplido años.
  25.     //Si da mayor si ha cumplido
  26.     //+ 1 porque los meses empiezan en 0
  27.     if ( hoy.getMonth() + 1 - mes < 0)
  28.        return edad
  29.        
  30.     if ( hoy.getMonth() + 1 - mes > 0)
  31.        return edad+1
  32.  
  33.     //Si resto los dias y me da menor que 0 entonces no ha cumplido años.
  34.     //Si da mayor o igual si ha cumplido
  35.     if ( hoy.getUTCDate() - dia >= 0)
  36.        return edad + 1
  37.  
  38.     return edad
  39. }
  40. </script>



Código HTML:
Ver original
  1.  
  2. <form name="form1" id="form1">
  3. <select name="dianac" id="dianac" size="1">  
  4. <option value="1">01</option>  
  5. <option value="2">02</option>  
  6. .  
  7. .  
  8. .  
  9. </select>
  10. <select name="mesnacs" id="mesnacs" size="1">  
  11. <option value="01">Enero</option>  
  12. <option value="02">Febrero</option>  
  13. .  
  14. .  
  15. .  
  16. </select>
  17.  
  18. <input name="anonac" id="anonac" type="text" size="5" maxlength="2"
  19. onKeyPress=
  20. "if (event.keyCode<45||event.keyCode>57)event.returnValue=false;">  
  21. <input name="edad" type="text" size="5" id="edad"
  22. onfocus="this.form.edad.value=calcular_edad()">  
  23. </form>
  24. </body>
  #2 (permalink)  
Antiguo 05/07/2011, 16:46
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 6 meses
Puntos: 511
Respuesta: fecha de nacimiento automatica con error ......

Hola que tal SideEfect

Tu tema no corresponde a php pide a un moderador o colaborador que te ayude a colocarlo en el foro correcto.

Saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #3 (permalink)  
Antiguo 05/07/2011, 16:46
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: fecha de nacimiento automatica con error ......

He reportado tu mensaje para que lo muevan al lugar correcto.

Para la próxima procura revisar con atención donde va tu tema, y por favor, lee las normas del foro.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 05/07/2011, 16:54
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 13 años
Puntos: 0
Respuesta: fecha de nacimiento automatica con error ......

disculpen por lo afanado q estaba no vi q lo habia puesto en el lugar equivocado
  #5 (permalink)  
Antiguo 06/07/2011, 22:24
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 13 años
Puntos: 0
Respuesta: fecha de nacimiento automatica con error ......

alguien puede ayudarme?¿
  #6 (permalink)  
Antiguo 07/07/2011, 01:55
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 6 meses
Puntos: 66
Respuesta: fecha de nacimiento automatica con error ......

hola sideEfect,
prueba con todo esto:
--------------------------
function anyoBis(anyo)
{
if ((anyo % 4 == 0) && (( anyo % 100 != 0) || (anyo % 400 ==0)))
return true;
else
return false;
}
function validarFecha(mes,dia,anyo)
{
var bis = anyoBis(anyo); //recogemos el valor de si es o no bisiesto por si es necesario usarlo
var ret = false; //por defecto es falso por si mes no está comprendido entre 1 y 12
var numMes = new Number(mes);
var numDia = new Number(dia);
//meses de 31 dias
if(numMes == 1 || numMes == 3 || numMes == 5 || numMes == 7 || numMes == 8 || numMes == 10 || numMes == 12)
{
if(numDia<1 || numDia>31)
ret = false;
else
ret = true;
}
//meses de 30 dias
if(numMes == 4 || numMes == 6 || numMes == 9 || numMes == 11)
{
if(numDia<1 || numDia>30)
ret = false;
else
ret = true;
}
//mes de febrero
if(numMes == 2)
{
if(numDia>0 && numDia<29)
{ret = true;}
else if(numDia == 29 && bis == true)
{ret = true;}
else if(numDia<1 || numDia>30)
{ret = false;}
else
{ret = false;}
}
return ret;
}
function calcularEdad(fNac)
{

var fHoy = new Date();
var fHoy = fHoy.getDate() + "/" + parseInt(fHoy.getMonth()+1) + "/" + fHoy.getFullYear();
var array_fecha = fNac.split("/")
var array_fHoy = fHoy.split("/")
if(!validarFecha(array_fecha[1],array_fecha[0],array_fecha[2]))
{
alert('La fecha de nacimiento no es correcta.');
return false;
}

edadHoy=new Date(fHoy)

//si el array no tiene tres partes, la fecha es incorrecta
if (array_fecha.length!=3)
{
alert('La fecha de nacimiento no tiene un formato correcto (dd/mm/aaaa)');
return false;
}

//compruebo que los año, 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;

//resto los años de las dos fechas
edad=edadHoy.getYear()- ano - 1; //-1 porque no se si ha cumplido años ya este año
var mismoMes = true;
//si resto los meses y me da menor que 0 entonces no ha cumplido años. Si da mayor si ha cumplido
if (edadHoy.getMonth() + 1 - mes < 0) //+ 1 porque los meses empiezan en 0
{
edad += 0;
mismoMes=false;
}
if (edadHoy.getMonth() + 1 - mes > 0)
{
edad += 1
mismoMes=false;
}
//como el mes de nacimiento es el mismo en el que estamos compruebo los días
if(mismoMes)
{
//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 ((edadHoy.getUTCDate()+1) - dia >= 0)
edad += 1
else
edad += 0
}
return edad;
}
-------------------
debes llamar a la función calcularEdad(fNac), y el formato de fNac que sea dd/mm/aaaa.

saludos.
  #7 (permalink)  
Antiguo 07/07/2011, 10:47
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 13 años
Puntos: 0
Respuesta: fecha de nacimiento automatica con error ......

Cita:
Iniciado por ceSharp Ver Mensaje
hola sideEfect,
prueba con todo esto:
--------------------------
function anyoBis(anyo)
{
if ((anyo % 4 == 0) && (( anyo % 100 != 0) || (anyo % 400 ==0)))
return true;
else
return false;
}
function validarFecha(mes,dia,anyo)
{
var bis = anyoBis(anyo); //recogemos el valor de si es o no bisiesto por si es necesario usarlo
var ret = false; //por defecto es falso por si mes no está comprendido entre 1 y 12
var numMes = new Number(mes);
var numDia = new Number(dia);
//meses de 31 dias
if(numMes == 1 || numMes == 3 || numMes == 5 || numMes == 7 || numMes == 8 || numMes == 10 || numMes == 12)
{
if(numDia<1 || numDia>31)
ret = false;
else
ret = true;
}
//meses de 30 dias
if(numMes == 4 || numMes == 6 || numMes == 9 || numMes == 11)
{
if(numDia<1 || numDia>30)
ret = false;
else
ret = true;
}
//mes de febrero
if(numMes == 2)
{
if(numDia>0 && numDia<29)
{ret = true;}
else if(numDia == 29 && bis == true)
{ret = true;}
else if(numDia<1 || numDia>30)
{ret = false;}
else
{ret = false;}
}
return ret;
}
function calcularEdad(fNac)
{

var fHoy = new Date();
var fHoy = fHoy.getDate() + "/" + parseInt(fHoy.getMonth()+1) + "/" + fHoy.getFullYear();
var array_fecha = fNac.split("/")
var array_fHoy = fHoy.split("/")
if(!validarFecha(array_fecha[1],array_fecha[0],array_fecha[2]))
{
alert('La fecha de nacimiento no es correcta.');
return false;
}

edadHoy=new Date(fHoy)

//si el array no tiene tres partes, la fecha es incorrecta
if (array_fecha.length!=3)
{
alert('La fecha de nacimiento no tiene un formato correcto (dd/mm/aaaa)');
return false;
}

//compruebo que los año, 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;

//resto los años de las dos fechas
edad=edadHoy.getYear()- ano - 1; //-1 porque no se si ha cumplido años ya este año
var mismoMes = true;
//si resto los meses y me da menor que 0 entonces no ha cumplido años. Si da mayor si ha cumplido
if (edadHoy.getMonth() + 1 - mes < 0) //+ 1 porque los meses empiezan en 0
{
edad += 0;
mismoMes=false;
}
if (edadHoy.getMonth() + 1 - mes > 0)
{
edad += 1
mismoMes=false;
}
//como el mes de nacimiento es el mismo en el que estamos compruebo los días
if(mismoMes)
{
//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 ((edadHoy.getUTCDate()+1) - dia >= 0)
edad += 1
else
edad += 0
}
return edad;
}
-------------------
debes llamar a la función calcularEdad(fNac), y el formato de fNac que sea dd/mm/aaaa.

saludos.

gracias de antemano por tomarte el tiempo en responder y tratar de ayudarme ya intente pero veo q la funcion esta mas q todo direccionado a input text , y yo quisiera q fuera con select como el q tengo arriba mmmmm y preferiblemente sin recargar la pagina hasta ahora no me da ,y la verdad no se q tendre malo
  #8 (permalink)  
Antiguo 07/07/2011, 14:53
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: fecha de nacimiento automatica con error ......

Fijate si te sirve esto:
Código PHP:
<!DOCTYPE html>
<
html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Documento sin título</title>
</
head>

<
body>

<
form name="form1" id="form1">
<
select name="dianac" id="dianac" size="1">
<
option value="1">01</option>
<
option value="2">02</option>
<
option value="3">03</option>
<
option value="4">04</option>
<
option value="5">05</option>
<
option value="6">06</option>
<
option value="7">07</option>
<
option value="8">08</option>
<
option value="9">09</option>
<
option value="10">10</option>
<
option value="11">11</option>
<
option value="12">12</option>
<
option value="13">13</option>
<
option value="14">14</option>
<
option value="15">15</option>
<
option value="16">16</option>
<
option value="17">17</option>
<
option value="18">18</option>
<
option value="19">19</option>
<
option value="20">20</option>
<
option value="21">21</option>
<
option value="22">22</option>
<
option value="23">23</option>
<
option value="24">24</option>
<
option value="25">25</option>
<
option value="26">26</option>
<
option value="27">27</option>
<
option value="28">28</option>
<
option value="29">29</option>
<
option value="30">30</option>
<
option value="31">31</option>

</
select
<
select name="mesnac" id="mesnac" size="1">
<
option value="0">Enero</option>
<
option value="1">Febrero</option>
<
option value="2">Marzo</option>
<
option value="3">Abril</option>
<
option value="4">Mayo</option>
<
option value="5">Junio</option>
<
option value="6">Julio</option>
<
option value="7">Agosto</option>
<
option value="8">Setiembre</option>
<
option value="9">Octubre</option>
<
option value="10">Novienbre</option>
<
option value="11">Diciembre</option>

</
select
<
input name="anonac" id="anonac" type="text" size="5" maxlength="4" 
onkeyup
"if(isNaN(this.value)){this.value=this.value.substring(0,this.value.length-1)}">
<
input name="edad" type="text" size="5" id="edad"
onfocus="this.value=Math.floor((new Date().getTime()-new Date(anonac.value,mesnac.value,dianac.value).getTime())/(365.25*24*60*60*1000));">
</
form>
</
body>

</
html
  #9 (permalink)  
Antiguo 07/07/2011, 17:21
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 13 años
Puntos: 0
Respuesta: fecha de nacimiento automatica con error ......

Cita:
Iniciado por Panino5001 Ver Mensaje
Fijate si te sirve esto:
Código PHP:
<!DOCTYPE html>
<
html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Documento sin título</title>
</
head>

<
body>

<
form name="form1" id="form1">
<
select name="dianac" id="dianac" size="1">
<
option value="1">01</option>
<
option value="2">02</option>
<
option value="3">03</option>
<
option value="4">04</option>
<
option value="5">05</option>
<
option value="6">06</option>
<
option value="7">07</option>
<
option value="8">08</option>
<
option value="9">09</option>
<
option value="10">10</option>
<
option value="11">11</option>
<
option value="12">12</option>
<
option value="13">13</option>
<
option value="14">14</option>
<
option value="15">15</option>
<
option value="16">16</option>
<
option value="17">17</option>
<
option value="18">18</option>
<
option value="19">19</option>
<
option value="20">20</option>
<
option value="21">21</option>
<
option value="22">22</option>
<
option value="23">23</option>
<
option value="24">24</option>
<
option value="25">25</option>
<
option value="26">26</option>
<
option value="27">27</option>
<
option value="28">28</option>
<
option value="29">29</option>
<
option value="30">30</option>
<
option value="31">31</option>

</
select
<
select name="mesnac" id="mesnac" size="1">
<
option value="0">Enero</option>
<
option value="1">Febrero</option>
<
option value="2">Marzo</option>
<
option value="3">Abril</option>
<
option value="4">Mayo</option>
<
option value="5">Junio</option>
<
option value="6">Julio</option>
<
option value="7">Agosto</option>
<
option value="8">Setiembre</option>
<
option value="9">Octubre</option>
<
option value="10">Novienbre</option>
<
option value="11">Diciembre</option>

</
select
<
input name="anonac" id="anonac" type="text" size="5" maxlength="4" 
onkeyup
"if(isNaN(this.value)){this.value=this.value.substring(0,this.value.length-1)}">
<
input name="edad" type="text" size="5" id="edad"
onfocus="this.value=Math.floor((new Date().getTime()-new Date(anonac.value,mesnac.value,dianac.value).getTime())/(365.25*24*60*60*1000));">
</
form>
</
body>

</
html


panini sos un groso la verdad me funciono muy bn sin embargo al poner un ejemplo estricto de la edad por ejemplo que x persona cumple años mañana julio 7 no se queda en la edad actual hasta q no elija un mes anterior .... pero en resto funciona bn ,otra cosa seria una pregunta ,si modifico el input text del año y lo cambio por un select y a q me analize los 4 digitos del año ,tendria algun incoveniente ? gracias por tu atencion y voluntad de ayudar
  #10 (permalink)  
Antiguo 07/07/2011, 21:47
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 13 años
Puntos: 0
Respuesta: fecha de nacimiento automatica con error ......

Cita:
Iniciado por Panino5001 Ver Mensaje
Fijate si te sirve esto:
Código PHP:
<!DOCTYPE html>
<
html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Documento sin título</title>
</
head>

<
body>

<
form name="form1" id="form1">
<
select name="dianac" id="dianac" size="1">
<
option value="1">01</option>
<
option value="2">02</option>
<
option value="3">03</option>
<
option value="4">04</option>
<
option value="5">05</option>
<
option value="6">06</option>
<
option value="7">07</option>
<
option value="8">08</option>
<
option value="9">09</option>
<
option value="10">10</option>
<
option value="11">11</option>
<
option value="12">12</option>
<
option value="13">13</option>
<
option value="14">14</option>
<
option value="15">15</option>
<
option value="16">16</option>
<
option value="17">17</option>
<
option value="18">18</option>
<
option value="19">19</option>
<
option value="20">20</option>
<
option value="21">21</option>
<
option value="22">22</option>
<
option value="23">23</option>
<
option value="24">24</option>
<
option value="25">25</option>
<
option value="26">26</option>
<
option value="27">27</option>
<
option value="28">28</option>
<
option value="29">29</option>
<
option value="30">30</option>
<
option value="31">31</option>

</
select
<
select name="mesnac" id="mesnac" size="1">
<
option value="0">Enero</option>
<
option value="1">Febrero</option>
<
option value="2">Marzo</option>
<
option value="3">Abril</option>
<
option value="4">Mayo</option>
<
option value="5">Junio</option>
<
option value="6">Julio</option>
<
option value="7">Agosto</option>
<
option value="8">Setiembre</option>
<
option value="9">Octubre</option>
<
option value="10">Novienbre</option>
<
option value="11">Diciembre</option>

</
select
<
input name="anonac" id="anonac" type="text" size="5" maxlength="4" 
onkeyup
"if(isNaN(this.value)){this.value=this.value.substring(0,this.value.length-1)}">
<
input name="edad" type="text" size="5" id="edad"
onfocus="this.value=Math.floor((new Date().getTime()-new Date(anonac.value,mesnac.value,dianac.value).getTime())/(365.25*24*60*60*1000));">
</
form>
</
body>

</
html
no se por q eliminastes tu ultima respuesta pero la acanze a leer y efectivamente tenias razon pero si mañana x personas cumple años y pasado mañana quieres ver su edad
seria ver mañana a la persona x con 1 año y pasado mañana con 0 eso es lo q veo aca
  #11 (permalink)  
Antiguo 07/07/2011, 21:48
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: fecha de nacimiento automatica con error ......

Podés usar un select sin inconvenientes para el año. No me sucedía lo que mencionás acerca de la fecha, pero sí podía registrar algún problema con edades muy grandes por el cálculo de bisisestos, así que te propongo algo más seguro e igualmente breve en cantidad de código:
Código PHP:
<!DOCTYPE html>
<
html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Documento sin título</title>
</
head>

<
body>

<
form name="form1" id="form1">
<
select name="dianac" id="dianac" size="1">
<
option value="1">01</option>
<
option value="2">02</option>
<
option value="3">03</option>
<
option value="4">04</option>
<
option value="5">05</option>
<
option value="6">06</option>
<
option value="7">07</option>
<
option value="8">08</option>
<
option value="9">09</option>
<
option value="10">10</option>
<
option value="11">11</option>
<
option value="12">12</option>
<
option value="13">13</option>
<
option value="14">14</option>
<
option value="15">15</option>
<
option value="16">16</option>
<
option value="17">17</option>
<
option value="18">18</option>
<
option value="19">19</option>
<
option value="20">20</option>
<
option value="21">21</option>
<
option value="22">22</option>
<
option value="23">23</option>
<
option value="24">24</option>
<
option value="25">25</option>
<
option value="26">26</option>
<
option value="27">27</option>
<
option value="28">28</option>
<
option value="29">29</option>
<
option value="30">30</option>
<
option value="31">31</option>

</
select
<
select name="mesnac" id="mesnac" size="1">
<
option value="0">Enero</option>
<
option value="1">Febrero</option>
<
option value="2">Marzo</option>
<
option value="3">Abril</option>
<
option value="4">Mayo</option>
<
option value="5">Junio</option>
<
option value="6">Julio</option>
<
option value="7">Agosto</option>
<
option value="8">Setiembre</option>
<
option value="9">Octubre</option>
<
option value="10">Novienbre</option>
<
option value="11">Diciembre</option>

</
select
<
input name="anonac" id="anonac" type="text" size="5" maxlength="4" 
onkeyup
"if(isNaN(this.value)){this.value=this.value.substring(0,this.value.length-1)}">
<
input name="edad" type="text" size="5" id="edad"
onfocus="var y=anonac.value,e=0;while(new Date(++y,mesnac.value,dianac.value)<new Date())e++;this.value=e">
</
form>
</
body>

</
html
  #12 (permalink)  
Antiguo 08/07/2011, 09:31
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 13 años
Puntos: 0
Respuesta: fecha de nacimiento automatica con error ......

Cita:
Iniciado por Panino5001 Ver Mensaje
Podés usar un select sin inconvenientes para el año. No me sucedía lo que mencionás acerca de la fecha, pero sí podía registrar algún problema con edades muy grandes por el cálculo de bisisestos, así que te propongo algo más seguro e igualmente breve en cantidad de código:
Código PHP:
<!DOCTYPE html>
<
html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Documento sin título</title>
</
head>

<
body>

<
form name="form1" id="form1">
<
select name="dianac" id="dianac" size="1">
<
option value="1">01</option>
<
option value="2">02</option>
<
option value="3">03</option>
<
option value="4">04</option>
<
option value="5">05</option>
<
option value="6">06</option>
<
option value="7">07</option>
<
option value="8">08</option>
<
option value="9">09</option>
<
option value="10">10</option>
<
option value="11">11</option>
<
option value="12">12</option>
<
option value="13">13</option>
<
option value="14">14</option>
<
option value="15">15</option>
<
option value="16">16</option>
<
option value="17">17</option>
<
option value="18">18</option>
<
option value="19">19</option>
<
option value="20">20</option>
<
option value="21">21</option>
<
option value="22">22</option>
<
option value="23">23</option>
<
option value="24">24</option>
<
option value="25">25</option>
<
option value="26">26</option>
<
option value="27">27</option>
<
option value="28">28</option>
<
option value="29">29</option>
<
option value="30">30</option>
<
option value="31">31</option>

</
select
<
select name="mesnac" id="mesnac" size="1">
<
option value="0">Enero</option>
<
option value="1">Febrero</option>
<
option value="2">Marzo</option>
<
option value="3">Abril</option>
<
option value="4">Mayo</option>
<
option value="5">Junio</option>
<
option value="6">Julio</option>
<
option value="7">Agosto</option>
<
option value="8">Setiembre</option>
<
option value="9">Octubre</option>
<
option value="10">Novienbre</option>
<
option value="11">Diciembre</option>

</
select
<
input name="anonac" id="anonac" type="text" size="5" maxlength="4" 
onkeyup
"if(isNaN(this.value)){this.value=this.value.substring(0,this.value.length-1)}">
<
input name="edad" type="text" size="5" id="edad"
onfocus="var y=anonac.value,e=0;while(new Date(++y,mesnac.value,dianac.value)<new Date())e++;this.value=e">
</
form>
</
body>

</
html
ya pille el error que te decia panino y no era nada de tu codigo si no de la pila interna de mi pc que hace q la fecha se desconfigure ,con respecto al año bisiesto estas en lo correcto piensas q seria mejor dejarlo asi como esta y hacer una validacion por javascript de cada año bisiesto o desabilitar esos dias (30,31)de cada año
  #13 (permalink)  
Antiguo 08/07/2011, 09:53
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: fecha de nacimiento automatica con error ......

Este último no tiene el problema de los bisiestos. Lo único que deberías hacer es validar dentro del while que e no supere, por ejemplo, el valor 110 (no sé cuál es el record de longevidad, pero creo que es un buen número) porque si alguien coloca un año muy bajo puede hacerse muy lento:
Código PHP:
<!DOCTYPE html
<
html
<
head
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<
title>Documento sin título</title
</
head

<
body

<
form name="form1" id="form1"
<
select name="dianac" id="dianac" size="1"
<
option value="1">01</option
<
option value="2">02</option
<
option value="3">03</option
<
option value="4">04</option
<
option value="5">05</option
<
option value="6">06</option
<
option value="7">07</option
<
option value="8">08</option
<
option value="9">09</option
<
option value="10">10</option
<
option value="11">11</option
<
option value="12">12</option
<
option value="13">13</option
<
option value="14">14</option
<
option value="15">15</option
<
option value="16">16</option
<
option value="17">17</option
<
option value="18">18</option
<
option value="19">19</option
<
option value="20">20</option
<
option value="21">21</option
<
option value="22">22</option
<
option value="23">23</option
<
option value="24">24</option
<
option value="25">25</option
<
option value="26">26</option
<
option value="27">27</option
<
option value="28">28</option
<
option value="29">29</option
<
option value="30">30</option
<
option value="31">31</option

</
select>  
<
select name="mesnac" id="mesnac" size="1"
<
option value="0">Enero</option
<
option value="1">Febrero</option
<
option value="2">Marzo</option
<
option value="3">Abril</option
<
option value="4">Mayo</option
<
option value="5">Junio</option
<
option value="6">Julio</option
<
option value="7">Agosto</option
<
option value="8">Setiembre</option
<
option value="9">Octubre</option
<
option value="10">Novienbre</option
<
option value="11">Diciembre</option

</
select>  
<
input name="anonac" id="anonac" type="text" size="5" maxlength="4"  
onkeyup=  
"if(isNaN(this.value)){this.value=this.value.substring(0,this.value.length-1)}"
<
input name="edad" type="text" size="5" id="edad" 
onfocus="var y=anonac.value,e=0;while(new Date(++y,mesnac.value,dianac.value)<new Date()){if(e>110){alert('el año es incorrecto');return this.value='';}e++;}this.value=e"
</
form
</
body

</
html
  #14 (permalink)  
Antiguo 08/07/2011, 20:40
 
Fecha de Ingreso: mayo-2011
Mensajes: 38
Antigüedad: 13 años
Puntos: 0
Respuesta: fecha de nacimiento automatica con error ......

Cita:
Iniciado por Panino5001 Ver Mensaje
Este último no tiene el problema de los bisiestos. Lo único que deberías hacer es validar dentro del while que e no supere, por ejemplo, el valor 110 (no sé cuál es el record de longevidad, pero creo que es un buen número) porque si alguien coloca un año muy bajo puede hacerse muy lento:
Código PHP:
<!DOCTYPE html
<
html
<
head
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<
title>Documento sin título</title
</
head

<
body

<
form name="form1" id="form1"
<
select name="dianac" id="dianac" size="1"
<
option value="1">01</option
<
option value="2">02</option
<
option value="3">03</option
<
option value="4">04</option
<
option value="5">05</option
<
option value="6">06</option
<
option value="7">07</option
<
option value="8">08</option
<
option value="9">09</option
<
option value="10">10</option
<
option value="11">11</option
<
option value="12">12</option
<
option value="13">13</option
<
option value="14">14</option
<
option value="15">15</option
<
option value="16">16</option
<
option value="17">17</option
<
option value="18">18</option
<
option value="19">19</option
<
option value="20">20</option
<
option value="21">21</option
<
option value="22">22</option
<
option value="23">23</option
<
option value="24">24</option
<
option value="25">25</option
<
option value="26">26</option
<
option value="27">27</option
<
option value="28">28</option
<
option value="29">29</option
<
option value="30">30</option
<
option value="31">31</option

</
select>  
<
select name="mesnac" id="mesnac" size="1"
<
option value="0">Enero</option
<
option value="1">Febrero</option
<
option value="2">Marzo</option
<
option value="3">Abril</option
<
option value="4">Mayo</option
<
option value="5">Junio</option
<
option value="6">Julio</option
<
option value="7">Agosto</option
<
option value="8">Setiembre</option
<
option value="9">Octubre</option
<
option value="10">Novienbre</option
<
option value="11">Diciembre</option

</
select>  
<
input name="anonac" id="anonac" type="text" size="5" maxlength="4"  
onkeyup=  
"if(isNaN(this.value)){this.value=this.value.substring(0,this.value.length-1)}"
<
input name="edad" type="text" size="5" id="edad" 
onfocus="var y=anonac.value,e=0;while(new Date(++y,mesnac.value,dianac.value)<new Date()){if(e>110){alert('el año es incorrecto');return this.value='';}e++;}this.value=e"
</
form
</
body

</
html

groso total ... no se como agradecerte, gracias a ti y al primero q respondio por la voluntad de ayudar

Etiquetas: fecha, php, automatico
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.
Respuesta




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