2012-09-03 276 views
3

我想從用戶日期生日中顯示幾天,幾個月和幾年的最後時間。
這裏是我的代碼,因爲從這裏取:Calculate age in JavaScript
又如何能繼續與月和日,如:Javascript日期()根據當天,月份,年份計算年齡工作

用戶的生日是:2010/04/29
結果應該是像這樣:2年,4個月,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--; 
    } 
    return age; 
} 

alert(getAge('2010/04/29')); 

DEMO:http://jsfiddle.net/jFxb5/

+1

有用到u .. http://stackoverflow.com/questions/7833709/calculating-age-in-months-and -days –

回答

16
function getAge(dateString) { 
    var now = new Date(); 
    var today = new Date(now.getYear(),now.getMonth(),now.getDate()); 

    var yearNow = now.getYear(); 
    var monthNow = now.getMonth(); 
    var dateNow = now.getDate(); 

    var dob = new Date(dateString.substring(6,10), 
        dateString.substring(0,2)-1,     
        dateString.substring(3,5)     
        ); 

    var yearDob = dob.getYear(); 
    var monthDob = dob.getMonth(); 
    var dateDob = dob.getDate(); 
    var age = {}; 
    var ageString = ""; 
    var yearString = ""; 
    var monthString = ""; 
    var dayString = ""; 


    yearAge = yearNow - yearDob; 

    if (monthNow >= monthDob) 
    var monthAge = monthNow - monthDob; 
    else { 
    yearAge--; 
    var monthAge = 12 + monthNow -monthDob; 
    } 

    if (dateNow >= dateDob) 
    var dateAge = dateNow - dateDob; 
    else { 
    monthAge--; 
    var dateAge = 31 + dateNow - dateDob; 

    if (monthAge < 0) { 
     monthAge = 11; 
     yearAge--; 
    } 
    } 

    age = { 
     years: yearAge, 
     months: monthAge, 
     days: dateAge 
     }; 

    if (age.years > 1) yearString = " years"; 
    else yearString = " year"; 
    if (age.months> 1) monthString = " months"; 
    else monthString = " month"; 
    if (age.days > 1) dayString = " days"; 
    else dayString = " day"; 


    if ((age.years > 0) && (age.months > 0) && (age.days > 0)) 
    ageString = age.years + yearString + ", " + age.months + monthString + ", and " + age.days + dayString + " old."; 
    else if ((age.years == 0) && (age.months == 0) && (age.days > 0)) 
    ageString = "Only " + age.days + dayString + " old!"; 
    else if ((age.years > 0) && (age.months == 0) && (age.days == 0)) 
    ageString = age.years + yearString + " old. Happy Birthday!!"; 
    else if ((age.years > 0) && (age.months > 0) && (age.days == 0)) 
    ageString = age.years + yearString + " and " + age.months + monthString + " old."; 
    else if ((age.years == 0) && (age.months > 0) && (age.days > 0)) 
    ageString = age.months + monthString + " and " + age.days + dayString + " old."; 
    else if ((age.years > 0) && (age.months == 0) && (age.days > 0)) 
    ageString = age.years + yearString + " and " + age.days + dayString + " old."; 
    else if ((age.years == 0) && (age.months > 0) && (age.days == 0)) 
    ageString = age.months + monthString + " old."; 
    else ageString = "Oops! Could not calculate age!"; 

    return ageString; 
} 


alert(getAge('09/09/1989')); 

DEMO HERE

+2

這段代碼不是遠程正確的 - 在很多情況下它會返回(例如)負數的月份和/或天數。 – Alnitak

+0

已更新。有點冗長,但效果很好。 :) – ygssoni

+0

@kakarott:謝謝,但這不工作的權利,見日期'29/04/2010':http://jsfiddle.net/x9paT/1/ –

2

@Jennifer或其他不希望的格式mm/dd/yyyy的限制誰。我所做的只是與

var dob = new Date(dateString); 

更換

var dob = new Date(dateString.substring(6,10), 
        dateString.substring(0,2)-1,     
        dateString.substring(3,5)     
       ); 

,我可以使用2012/09/30並得到正確的答案。

0

按年,月,日計算年齡。在任何有效的日期字符串格式輸入日期 如「1952年9月28日」,「1952年9月29日」, '09 /1952分之28' 等

需要兩個參數 - 出生日期和日期,以計算 年齡。您可以在今天的日期留下第二個參數。 返回具有年齡,月份和日期屬性的對象。

使用一年​​365.2425天的太陽年價值。

@param birthDate出生日期。 @param ageAtDate計算年齡的日期。 今天的日期沒有。 @Returns {{年:數,月數:數,天:數}}

function getAge(birthDate, ageAtDate) { 
    var daysInMonth = 30.436875; // Days in a month on average. 
    var dob = new Date(birthDate); 
    var aad; 
    if (!ageAtDate) aad = new Date(); 
    else aad = new Date(ageAtDate); 
    var yearAad = aad.getFullYear(); 
    var yearDob = dob.getFullYear(); 
    var years = yearAad - yearDob; // Get age in years. 
    dob.setFullYear(yearAad); // Set birthday for this year. 
    var aadMillis = aad.getTime(); 
    var dobMillis = dob.getTime(); 
    if (aadMillis < dobMillis) { 
     --years; 
     dob.setFullYear(yearAad - 1); // Set to previous year's birthday 
     dobMillis = dob.getTime(); 
    } 
    var days = (aadMillis - dobMillis)/86400000; 
    var monthsDec = days/daysInMonth; // Months with remainder. 
    var months = Math.floor(monthsDec); // Remove fraction from month. 
    days = Math.floor(daysInMonth * (monthsDec - months)); 
    return {years: years, months: months, days: days}; 
} 
+1

請添加一些說明,並解釋它是如何工作和熱它不同於其他答案。現在,這是一個代碼轉儲。 – Raju

相關問題