2010-11-11 52 views
6

Quería obtener la edad de una persona a partir de su fecha de nacimiento. Tengo un código HTML donde estoy usando un datepicker para dob, cuando le doy la fecha de nacimiento, este muestra automáticamente la edad sin enviar. Por favor, ayúdame a encontrar una solución para esto.Cómo obtener edad automáticamente cuando se le dio Fecha de nacimiento

<html> 
    <head> 
     <title> 
      DOB calculations 
     </title> 
     <link rel='stylesheet' type='text/css' href='jquery-ui.css' /> 
     <script type='text/javascript' src='jquery.min.js'> 
     </script> 
     <script type='text/javascript' src='jquery-ui.min.js'> 
     </script> 
     <script type='text/javascript' src='jquery.js'> 
     </script> 
     <script type='text/javascript' src='jquery-ui-custom.js'> 
     </script> 
     <script type='text/javascript' src='jquery.ui.datepicker.js'> 
     </script> 
     <script type="text/javascript"> 
      $(function() { 

       $('#datepicker').datepicker({ 
        changeMonth: true, 
        changeYear: true, 
        dateFormat: 'mm/dd/yy', 
        //firstDay: 1, 
        onSelect: function(dateText, inst) { 
         dateText.split('/'); 
         Bdate = new Date(dateText[2], dateText[0] - 1, dateText[1]); 
         BDateArr = ('' + Bdate).split(' '); 
         //document.getElementById('DOW').value = BDateArr[0]; 
         Cdate = new Date; 
         CDateArr = ('' + Cdate).split(" "); 
         Age = CDateArr[3] - BDateArr[3]; 
         document.getElementById('AGE').value = Age; 
         // DOBcalc(dateText); 
         //DOBcalc(); 
        } 
       }) 

      }); 
     </script> 
    </head> 

    <body> 
     <form> 
      DOB (mm/dd/yyyy): 
      <input type="text" id="datepicker" value=''> 
      Age: 
      <input id="AGE" type="text" value=""> 
     </form> 
    </body> 
</html> 

Respuesta

9

Usted puede intentar usar esta función como su manejador onSelect evento en su lugar:

$('#dob').datepicker({ 
    onSelect: function(value, ui) { 
     var today = new Date(), 
      dob = new Date(value), 
      age = new Date(today - dob).getFullYear() - 1970; 

     $('#age').text(age); 
    }, 
    maxDate: '+0d', 
    yearRange: '1920:2010', 
    changeMonth: true, 
    changeYear: true 
}); 

Esto debe ser muy preciso (y mucho mejor que mi viejo código), ya que todo ha sido entregado fuera a la nativa Date objeto.

ver una demostración simple de esta aquí: http://www.jsfiddle.net/yijiang/PHvYK/1

+0

demasiado good.Thank que tanto – yopirates

+0

va a volver por NaN 17/06/1986 si el formato de la fecha es "dd/mm/aa" – alex

0

Si restas dos Date objetos en Javascript, que se salen con la diferencia en milisegundos por lo (BDate - (new Date()))/365.25/24/60/60/1000 le dará un resultado edad que debe tener una precisión de un día. (Es decir, si su cumpleaños es hoy en día y es un año bisiesto que puede ser inexacta)

0

Suponiendo que la construcción de DOB correctamente, crear:

now = Date() //right now 

utilizar la función date.getTime() para obtener el tiempo en milisegundos. Dividir la diferencia de ellos por los milisegundos en un

one_year = 1000*60*60*24*365; 
years = (now.getTime() - DOB.getTime())/one_year; 

Pon esto en una devolución de llamada para cualquier cambio en cualquiera de sus campos de fecha y mostrar el resultado en donde quieras.

+0

que estará fuera de sincronización unos días debido a varios años bisiestos, ya que la mayoría de las personas tienen más de 4 años, 365.25 serían más precisas (Aunque todavía no es perfecto ct) – tobyodavies

+0

sí lo noté en el suyo justo después de que lo sometí, buen punto. He oído que los años divisibles por 100 pero no 400 no son leapyears, así que supongo que 365+ (1.0/4) - (1.0/100) + (1.0/400) = 365.2425 sería mejor = P –

+0

por supuesto, cuidado las comparaciones serían mejores, pero ¿quién tiene tiempo para eso? –

0
<script type="text/javascript"> 
     $(function() { 
      $('#dtp').datepicker({ 
       changeMonth: true, 
       changeYear: true, 
       dateFormat: 'mm/dd/yy', 
       //firstDay: 1, 
       onSelect: function(dateText, inst) { 
        var d = new Date(Date.parse(inst.lastVal)); 
        var diff = (new Date()).getFullYear() - d.getFullYear(); 
        document.getElementById('AGE').value = diff; 
       } 
      }); 
     }); 
    </script> 
+0

too good.Gracias tantas – yopirates

+0

que necesita dar var d = new Date ((inst.input.val())); en lugar de var d = new Date (Date.parse (inst.lastVal)); para que funcione correctamente – yopirates

2
function getAge(birth) { 
    var today = new Date(); 
    var curr_date = today.getDate(); 
    var curr_month = today.getMonth() + 1; 
    var curr_year = today.getFullYear(); 

    var pieces = birth.split('/'); 
    var birth_date = pieces[0]; 
    var birth_month = pieces[1]; 
    var birth_year = pieces[2]; 

    if (curr_month == birth_month && curr_date >= birth_date) return parseInt(curr_year-birth_year); 
    if (curr_month == birth_month && curr_date < birth_date) return parseInt(curr_year-birth_year-1); 
    if (curr_month > birth_month) return parseInt(curr_year-birth_year); 
    if (curr_month < birth_month) return parseInt(curr_year-birth_year-1); 
} 

var age = getAge('18/01/2011'); 
alert(age); 
+0

Esta es una función agradable si tiene la fecha en un formato diferente del predeterminado – alex

1

Pruebe este código muy simple

function agefinding() 
    { 
     var birthDay = document.getElementById("TxtDOB").value; 
     var DOB = new Date(birthDay); 
     var today = new Date(); 
     var age = today.getTime() - DOB.getTime(); 
     age = Math.floor(age/(1000 * 60 * 60 * 24 * 365.25)); 
     // alert(age); 
     return age; 
    } 

esto es muy sencillo encontrar la edad usando javascript

Cuestiones relacionadas