年、月、日で年齢を計算します。「1952/09/28」、「1952 年 9 月 29 日」、「09/28/1952」などの有効な日付文字列形式で日付を入力します。
生年月日と年齢を計算する日付の 2 つの引数を取ります。今日の日付の 2 番目の引数を省略できます。age の年、月、日のプロパティを持つオブジェクトを返します。
1 年は 365.2425 日という太陽年の値を使用します。
@parambirthDate 生年月日。@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};
}