2010-11-11 13 views
6

Doğum tarihi itibariyle bir kişinin yaşını almak istedim. Dob için bir datepicker kullandığım bir HTML kodum var, doğum tarihini verdiğim zaman otomatik olarak gönderilmeden yaş göster. Bunun için bir çözüm bulmama yardım edin.Doğum Tarihi verildiğinde otomatik olarak yaşlanma Doğum tarihi

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

cevap

9

Bunun yerine onSelect olay işleyicisi olarak bu işlevi kullanarak deneyebilirsiniz:

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

her şey yerli devredilmiştir oldu, çünkü bu çok doğru (ve benim eski kod çok daha iyi) olmalıdır Date nesnesi. Eğer javascript iki Date nesneleri çıkarma durumunda http://www.jsfiddle.net/yijiang/PHvYK/1

+0

çok good.Thank bu kadar çok – yopirates

+0

17/06 için NaN dönecektir JavaScript kullanarak yaşını bulmak çok basittir/1986, tarihin formatı birkaç sene boyunca birkaç gün içinde senkronize edilmeyecek "dd/aa/yy" – alex

0

, bunu (BDate - (new Date()))/365.25/24/60/60/1000 size bir gün içinde doğru olmalıdır yaş sonucunu verecektir milisaniye cinsinden onların farkı olsun:

bu burada basit bir gösteri bakınız. (Onların doğum günü bugün ve artık yıl o yanlış olabilir eğer yani)

0

düzgün DOB inşa varsayarak, oluşturun:

now = Date() //right now 

milisaniye cinsinden saati almak için date.getTime() işlevini kullanın. Tarih alanlardan herhangi birinde herhangi bir değişiklik bir geri koy bir

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

milisaniye ile bunlardan farkı bölün ve istediğiniz yere sonucunu görüntüler.

+0

ise - çoğu kişi 4 yaşından büyük olduğundan, 365.25 daha doğru olur (hala perfe değil ct) – tobyodavies

+0

evet, sunduğum tarihten sonra, iyi bir noktaya dikkat ettim. Yılların 100 ile bölünebileceğini duydum ama 400 değil, o kadar da çirkin değil, bu yüzden 365+ (1.0/4) - (1.0/100) + (1.0/400) = 365.2425 en iyisi = P –

+0

dikkatli olmalı Karşılaştırmalar daha iyi olurdu, ama kimin için zaman var? –

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

çok iyi.Teşekkür ederim – yopirates

+0

var vermek için var d = yeni Tarih ((inst.input.val())); var d = new Date (Date.parse (inst.lastVal)) yerine; düzgün çalışması – 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

Bu, varsayılandan farklı bir biçimde tarihe sahipseniz iyi bir işlevdir – alex

1

çok basit Bu kod deneyin

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

bu