2011-10-20 57 views
5
function getAge(dateString) { 
    var today = new Date(); 
    var birthDate = new Date(dateString); 
    var age = today.getFullYear() - birthDate.getFullYear(); 
    var m = today.getMonth() - birthDate.getMonth(); 
    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) { 
     age--; 
    } 
    document.write(age); 

} 

getAge("01/20/2011") 

Điều này cho tôi thấy 0 năm, nhưng tôi muốn hiển thị 10 Months và 9 tháng cho đến khi sinh nhật của anh ấy 10/20/2011.Tính tuổi theo tháng và ngày

+0

Chính xác bạn muốn nhận được gì. Tháng còn lại cho đến sinh nhật tiếp theo? hoặc tuổi của người đó? Vui lòng làm rõ. Cảm ơn. – HashimR

Trả lời

10

Nó thường xảy ra rằng bạn muốn biết tuổi một người sẽ được vào một ngày cụ thể, hoặc năm , tháng và ngày giữa hai ngày.

Nếu bạn muốn tuổi của ngày hôm nay, hãy vượt qua một ngày hoặc một đối số đặt giá thầu.

function getAge(fromdate, todate){ 
    if(todate) todate= new Date(todate); 
    else todate= new Date(); 

    var age= [], fromdate= new Date(fromdate), 
    y= [todate.getFullYear(), fromdate.getFullYear()], 
    ydiff= y[0]-y[1], 
    m= [todate.getMonth(), fromdate.getMonth()], 
    mdiff= m[0]-m[1], 
    d= [todate.getDate(), fromdate.getDate()], 
    ddiff= d[0]-d[1]; 

    if(mdiff < 0 || (mdiff=== 0 && ddiff<0))--ydiff; 
    if(mdiff<0) mdiff+= 12; 
    if(ddiff<0){ 
     fromdate.setMonth(m[1]+1, 0); 
     ddiff= fromdate.getDate()-d[1]+d[0]; 
     --mdiff; 
    } 
    if(ydiff> 0) age.push(ydiff+ ' year'+(ydiff> 1? 's ':' ')); 
    if(mdiff> 0) age.push(mdiff+ ' month'+(mdiff> 1? 's':'')); 
    if(ddiff> 0) age.push(ddiff+ ' day'+(ddiff> 1? 's':'')); 
    if(age.length>1) age.splice(age.length-1,0,' and ');  
    return age.join(''); 
} 


getAge("1/25/1974")>> 37 years 8 months and 26 days 

getAge("9/15/1984")>> 27 years 1 month and 5 days 

getAge("12/20/1984","10,20,2011")>>26 years and 9 months 

getAge(new Date(),"12/25/2011")+' till Christmas'>> 
2 months and 5 days till Christmas 

getAge("6/25/2011")>> 3 months and 25 days 
+0

Tôi nghĩ rằng nên có nếu (mdiff <0) mdiff + = 12; thay vì nếu (mdiff <0) mdiff + = 11; Nếu không, nó sẽ bỏ qua một tháng khi độ tuổi nhỏ hơn một năm http://jsfiddle.net/nxtwrld/nmp7F/ – nxtwrld

+0

Có một lỗi trong giải pháp. Giả sử ngày hiện tại là ngày 16/02/2016 và bạn đã vượt qua ngày sinh ngày 17 tháng 3 năm 2015. Sau đó, mã trên trả về độ tuổi là 27 ngày. –

4

Với điều này bạn có thể có một văn bản tuổi mô tả: Ngày, tháng và năm:

function getAge(dateString) { 

    var birthdate = new Date(dateString).getTime(); 
    var now = new Date().getTime(); 
    // now find the difference between now and the birthdate 
    var n = (now - birthdate)/1000; 

    if (n < 604800) { // less than a week 
    var day_n = Math.floor(n/86400); 
    return day_n + ' day' + (day_n > 1 ? 's' : ''); 
    } else if (n < 2629743) { // less than a month 
    var week_n = Math.floor(n/604800); 
    return week_n + ' week' + (week_n > 1 ? 's' : ''); 
    } else if (n < 63113852) { // less than 24 months 
    var month_n = Math.floor(n/2629743); 
    return month_n + ' month' + (month_n > 1 ? 's' : ''); 
    } else { 
    var year_n = Math.floor(n/31556926); 
    return year_n + ' year' + (year_n > 1 ? 's' : ''); 
    } 
} 


var age = getAge("01/20/2011"); 
alert(age); 
+0

câu trả lời này đã giúp tôi rất nhiều bro :) – Madhu

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