2010-11-11 7 views
6

Je voulais connaître l'âge d'une personne à partir de sa date de naissance. J'ai un code HTML où j'utilise une datepicker pour dob, quand je donne la date de naissance, elle montre automatiquement l'âge sans donner. Aidez-moi s'il vous plaît à trouver une solution pour cela.Obtenir l'âge automatiquement lorsqu'il est donné Date de naissance

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

Répondre

9

Vous pouvez essayer d'utiliser cette fonction comme gestionnaire d'événements onSelect à la place:

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

Cela devrait être très précis (et bien mieux que mon ancien code), puisque tout a été transféré au natif Date objet.

Voir une simple démonstration de ce ici: http://www.jsfiddle.net/yijiang/PHvYK/1

+0

trop vous good.Thank tant – yopirates

+0

retournerez NaN 17/06/1986 si le format de la date est "jj/mm/aa" – alex

0

Si vous soustrayez deux Date objets en javascript, vous obtenez leur différence en millisecondes si (BDate - (new Date()))/365.25/24/60/60/1000 vous donnera un résultat d'âge qui devrait être précis à un jour. (À savoir si leur anniversaire est aujourd'hui et son année bissextile, il peut être inexact)

0

En supposant que vous construisez DOB correctement, créez:

now = Date() //right now 

utiliser la fonction date.getTime() pour obtenir le temps en millisecondes. Diviser la différence d'entre eux par les millisecondes dans un

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

Mettre cela dans un rappel pour tout changement dans l'un de vos champs de date et d'afficher le résultat où vous le souhaitez.

+0

qui sera désynchronisé de quelques jours en raison de plusieurs années bissextiles - comme la plupart des gens ont plus de 4 ans, 365,25 serait plus précis (pas encore perfe ct) – tobyodavies

+0

oui j'ai remarqué que sur le vôtre juste après j'ai soumis, bon point. J'ai entendu que les années divisibles par 100 mais pas 400 ne sont pas leapyears, donc je suppose que 365+ (1.0/4) - (1.0/100) + (1.0/400) = 365.2425 serait mieux = P –

+0

bien sûr prudent les comparaisons seraient meilleures, mais qui a le temps pour ça? –

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

trop bon.Merci tellement – yopirates

+0

vous devez donner var d = new Date ((inst.input.val())); au lieu de var d = new Date (Date.parse (inst.lastVal)); pour fonctionner correctement – 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

C'est une belle fonction si vous avez la date dans un format différent de la valeur par défaut – alex

1

Essayez Ce code très 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; 
    } 

est très simple de trouver l'âge en utilisant javascript

Questions connexes