年齢の算出

年齢の算出は簡単にできるかと思いきや、少々面倒臭い。これは、閏年というものが存在するためである。そのため以下のような単純な時間のdiffで算出しようとすると年を重ねる日時が1日ほどズレる場合がある。

const today = new Date(2010, 2, 10); // 2010-03-10
const birthday = new Date(2000, 2, 10); // 2000-03-10
const diff = today.getTime() - birthday.getTime();
const age = Math.floor(diff / (1000*3600*24*365.25));
console.log(age); // 9

また、誕生日が閏日(02-29)の人は、閏年以外は うるう年をめぐる法令|参議院法制局 によると、03-01 が誕生日となるのでこれも考慮すると以下のようになる。だいたいの日付オブジェクトでは閏年以外で 02-29 を指定すると 03-01 と解釈されるので、閏日の時に条件分けする必要はない。

// const today = new Date(2010, 1, 29); // 2010-03-01, 閏年以外で 02-29 を指定すると 03-01 と解釈される
const today = new Date(2010, 2, 10); // 2010-03-10
const birthday = new Date(2000, 2, 10); // 2000-03-10

let age = today.getFullYear() - birthday.getFullYear();
if (today.getMonth() < birthday.getMonth()) {
  age--;
}
else if (today.getMonth() === birthday.getMonth() && today.getDate() < birthday.getDate()) {
  age--;
}
console.log(age); // 10

ここで、上記で参照した うるう年をめぐる法令|参議院法制局 によると道路交通法では閏日の人は 02-28 が誕生日と解釈されるので道路交通法関連で年齢を算出するときは注意が必要となる。また日本国外では別のルールに基づく可能性があるので合わせて注意が必要となる。