Javascript Date()按日,月,年计算年龄工作

我希望从用户日期生日那里显示几天,几个月和几年。
这是我的代码,如下所示: 用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')); 

演示: http //jsfiddle.net/jFxb5/

 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')); 

在这里演示

@Jennifer,或者其他不想受格式限制的人mm / dd / yyyy。 我做的只是更换

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

 var dob = new Date(dateString); 

我可以使用2012/09/30并得到正确的答案。

按年,月和日计算年龄。 以任何有效的日期字符串格式输入日期,例如’1952/09/28’,’Sep 29,1952’,’09/28/1952’等。

采用2个参数 – 出生日期和计算年龄的日期。 您可以在今天的日期留下第二个参数。 返回具有年,月和日属性的对象。

使用一年365.2425天的太阳年值。

@param birthDate出生日期。 @param ageAtDate计算年龄的日期。 没有今天的日期。 @returns {{years:number,months:number,days:number}}

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