2010-11-11 7 views
6

Ich wollte das Alter einer Person von seinem Geburtsdatum erhalten. Ich habe einen HTML-Code, wo ich einen Datepicker für dob verwende, wenn ich das Geburtsdatum gebe, zeige es automatisch das Alter an, ohne submit zu geben. Bitte helfen Sie mir, eine Lösung dafür zu finden.Alter automatisch erhalten, wenn gegeben Geburtsdatum

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

Antwort

9

können Sie versuchen, diese Funktion als onSelect Event-Handler anstelle:

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

Dies sollte sehr genau sein (und viel besser als mein alter Code), da alles auf die native geben ist schon Date Objekt.

Hier finden Sie eine einfache Demonstration dieses hier: http://www.jsfiddle.net/yijiang/PHvYK/1

+0

zu good.Thank Sie so viel – yopirates

+0

wird NaN Rückkehr für 17/06/1986, wenn das Format des Datums "dd/mm/yy" – alex

0

Wenn Sie zwei Date Objekte in Javascript, subtrahieren, erhalten Sie die Differenz in Millisekunden so (BDate - (new Date()))/365.25/24/60/60/1000 ein Alter Ergebnis geben wird, die innerhalb eines Tages genau sein soll. (Das heißt, wenn sie heute Geburtstag und es ist ein Schaltjahr ist, kann es ungenau sein)

0

Angenommen, Sie DOB richtig konstruieren, zu erstellen:

now = Date() //right now 

verwenden, um die date.getTime() Funktion der Zeit in Millisekunden zu erhalten. Teilen Sie den Unterschied von ihnen durch die Millisekunden in einem

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

Setzen Sie dieses in einen Rückruf für jede Änderung in Ihren Datumsfelder und zeigt das Ergebnis, wo immer Sie möchten.

+0

ist, das wegen mehrerer Schaltjahre um ein paar Tage nicht synchron sein wird - da die meisten Menschen älter als 4 Jahre sind, wären 365,25 genauer (tho immer noch nicht perfekt ct) – tobyodavies

+0

Ja, ich bemerkte, dass auf Ihrem Recht, nachdem ich, guter Punkt eingereicht habe. Ich habe gehört, dass Jahre teilbar durch 100, aber nicht 400 sind nicht leftyears, also ich denke, 365+ (1.0/4) - (1.0/100) + (1.0/400) = 365.2425 wäre am besten = P –

+0

natürlich vorsichtig Vergleiche wären besser, aber wer hat dafür Zeit? –

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

zu gut.Vielen Dank – yopirates

+0

müssen Sie geben var d = neues Datum ((inst.input.val())); statt var d = neues Datum (Date.parse (inst.lastVal)); , um richtig zu arbeiten – 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

Dies ist eine nette Funktion, wenn Sie das Datum in einem anderen Format als Standard haben – alex

1

Dieser Code Versuchen sehr einfach

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

dies sehr einfach ist das Alter zu finden mit Hilfe von Javascript

Verwandte Themen