2010-11-11 16 views
6

Volevo ottenere l'età di una persona dalla sua data di nascita. Ho un codice HTML in cui sto usando un datepicker per dob, quando fornisco la data di nascita mostra automaticamente l'età senza inviare. Per favore aiutami a trovare una soluzione per questo.Ottenere automaticamente l'età quando viene data la data di nascita

<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> 

risposta

9

Puoi provare a utilizzare questa funzione come vostro gestore onSelect eventi invece:

$('#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 
}); 

Questo dovrebbe essere molto preciso (e molto meglio del mio vecchio codice), in quanto tutto è stato consegnato fuori per il nativo Date oggetto.

vedere un semplice dimostrazione di questo qui: http://www.jsfiddle.net/yijiang/PHvYK/1

+0

troppo good.Thank mille – yopirates

+0

tornerà NaN per 17/06/1986 se il formato della data è "gg/mm/aa" – alex

0

Se si sottrae due Date oggetti in javascript, si ottiene la loro differenza in millisecondi in modo (BDate - (new Date()))/365.25/24/60/60/1000 vi darà un risultato età che dovrebbe avere una precisione entro un giorno. (Vale a dire se il loro compleanno è oggi e il suo un anno bisestile può essere imprecise)

0

Supponendo che si costruisce DOB correttamente, creare:

now = Date() //right now 

utilizzare la funzione Date.getTime() per ottenere il tempo in millisecondi. Dividere la differenza di loro dai dai millisecondi in un

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

Mettete questo in un callback per ogni cambiamento in uno dei tuoi campi data e visualizzare il risultato dove si vuole.

+0

che non sarà sincronizzato entro pochi giorni a causa di diversi anni bisestili: poiché la maggior parte delle persone ha più di 4 anni, 365.25 sarebbe più preciso (non è ancora perfetto ct) – tobyodavies

+0

sì ho notato che sul tuo destra dopo che ho presentato, buon punto. Ho sentito che gli anni divisibili per 100 ma non 400 non sono leapyears, quindi suppongo 365+ (1.0/4) - (1.0/100) + (1.0/400) = 365.2425 sarebbe meglio = P –

+0

ovviamente attento i confronti sarebbero migliori, ma chi ha tempo per questo? –

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

troppo buono. Grazie mille – yopirates

+0

devi dare var d = new Date ((inst.input.val())); invece di var d = new Date (Date.parse (inst.lastVal)); per funzionare correttamente – 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

Questa è una funzione utile se si dispone della data in un formato diverso rispetto all'impostazione predefinita – alex

1

provare questo codice molto semplice

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; 
    } 

questo è molto semplice da trovare l'età utilizzando JavaScript

Problemi correlati