Calculates age in terms of years, months and days. Enter the dates
in any valid date string format such as '1952/09/28', 'Sep 29, 1952',
'09/28/1952' etc.
Takes 2 arguments - date of birth and the date on which to calculate
age. You can leave the second argument out for today's date.
Returns an object with years, months and days properties of age.
Uses the solar year value of 365.2425 days in a year.
@param birthDate Date of birth.
@param ageAtDate The date on which to calculate the age. None for
today's date.
@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};
}