2010-11-11 46 views
6

Tôi muốn lấy tuổi của một người từ ngày sinh của mình. Tôi có một mã HTML, nơi tôi đang sử dụng một datepicker cho dob, khi tôi đưa ra ngày sinh nó hiển thị tự động hiển thị tuổi mà không cần gửi. Xin hãy giúp tôi trong việc tìm kiếm một giải pháp cho việc này.Tự động lấy tuổi khi có Ngày sinh

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

Trả lời

9

Bạn có thể thử sử dụng chức năng này như trình điều khiển onSelect sự kiện của bạn thay vì:

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

này nên rất chính xác (và tốt hơn nhiều so với mã cũ của tôi), vì tất cả mọi thứ đã được trao tắt cho mẹ đẻ Date đối tượng.

Xem một cuộc biểu tình đơn giản đây này: http://www.jsfiddle.net/yijiang/PHvYK/1

+0

quá good.Thank bạn rất nhiều – yopirates

+0

sẽ trở lại NaN cho 17/06/1986 nếu định dạng của ngày là "dd/mm/yy" – alex

0

Nếu bạn trừ hai Date đối tượng trong javascript, bạn sẽ có được sự khác biệt của họ trong mili giây để (BDate - (new Date()))/365.25/24/60/60/1000 sẽ cung cấp cho bạn một kết quả tuổi mà phải chính xác để trong vòng một ngày. (Ví dụ: nếu sinh nhật của họ là hôm nay và một năm nhuận của nó có thể không chính xác)

0

Giả sử bạn xây dựng DOB đúng cách, tạo:

now = Date() //right now 

sử dụng date.getTime() chức năng để có được thời gian trong mili giây. Phân chia sự khác biệt của chúng theo mili giây trong một số

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

Đặt điều này vào cuộc gọi lại cho bất kỳ thay đổi nào trong bất kỳ trường ngày nào của bạn và hiển thị kết quả bất cứ nơi nào bạn muốn.

+0

sẽ không được đồng bộ hóa một vài ngày vì nhiều năm nhuận - vì hầu hết mọi người trên 4 tuổi, 365,25 sẽ chính xác hơn (tho vẫn không perfe ct) – tobyodavies

+0

có tôi nhận thấy rằng trên máy của bạn ngay sau khi tôi gửi, điểm tốt. Tôi đã nghe rằng năm chia hết cho 100 nhưng không phải 400 không phải là bước nhảy vọt, vì vậy tôi đoán 365+ (1.0/4) - (1.0/100) + (1.0/400) = 365.2425 sẽ là tốt nhất = P –

+0

của khóa học cẩn thận so sánh sẽ tốt hơn, nhưng ai có thời gian cho điều đó? –

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

quá tốt. Cảm ơn bạn rất nhiều – yopirates

+0

bạn cần cung cấp var d = new Date ((inst.input.val())); thay vì var d = new Date (Date.parse (inst.lastVal)); để hoạt động đúng cách – 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

Đây là chức năng tuyệt vời nếu bạn có ngày ở định dạng khác với mặc định – alex

1

Hãy thử này Mã rất đơn giản

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

này là rất đơn giản để tìm ra tuổi sử dụng javascript

Các vấn đề liên quan