JavaScriptで年齢を計算する方法(生年月日から年、月、日まで)
JavaScript で生年月日から年齢を計算する実用的な方法を学びます。正確な年、月、日、現在の日付オプション、タイム ゾーンやうるう年などのよくある落とし穴が含まれます。
JavaScript で生年月日 (DOB) から人の年齢を計算する必要がある場合は、いくつかの方法で実行できます。重要なのは、年齢:
が何を意味するのかを決めることです。- 修了年数 (最も一般的)
- 正確な年齢 (年、月、日)
- 特定の日付時点の年齢 (今日とは限りません)
1) 完了した年で年齢を計算します(シンプルで正確)
これが標準的なアプローチです。年を引き、今年誕生日がまだ起こっていない場合は調整します。
関数 ageInyears(dob, asOf = new Date()) {
const 誕生 = 新しい日付(dob);
const ref = 新しい日付(asOf);
let years = ref.getFull Year() -birth.getFull Year();
const m = ref.getMonth() -birth.getMonth();
if (m < 0 || (m === 0 && ref.getDate() < Birth.getDate())) {
年--;
}
年を返します。
}
例: DOB 2000-02-10 および 2026-02-09 時点では 25 (明日の誕生日) になります。
2) 正確な年齢 (年、月、日) を計算します
正確な内訳が必要な場合は、必要に応じて前月から「借用」して、最初に年、次に月、次に日数を計算できます。
関数 strictAge(dob, asOf = new Date()) {
const 誕生 = 新しい日付(dob);
const ref = 新しい日付(asOf);
let years = ref.getFull Year() -birth.getFull Year();
let months = ref.getMonth() -birth.getMonth();
let days = ref.getDate() -birth.getDate();
// 前月から借用して日数を調整します
if (日 < 0) {
const prevMonth = new Date(ref.getFull Year(), ref.getMonth(), 0); // 0日目 = 前月の末日
日数 += prevMonth.getDate();
数ヶ月--;
}
// 前年から借用して月を調整します
if (月 < 0) {
月 += 12;
年--;
}
{ 年、月、日 } を返します。
}
注: 月日のエッジケース (31 日の DOB など) では、慎重なテストが必要です。すべてのロケールおよび特殊なケースにわたって堅牢なものが必要な場合は、十分にテストされた日付ライブラリの使用を検討してください。
3) 過去または将来の日付の年齢には「現在」の日付を使用します
多くのアプリでは、特定の基準日 (保険、資格規定、学年度の区切り) での有効期限が必要です。上記の両方の関数は asOf パラメータを受け入れるため、次のことができます:
年齢年('1995-06-20', '2030-01-01');
正確な年齢('1995-06-20', '2030-01-01');
よくある落とし穴 (およびその回避方法)
- タイムゾーン:
YYYY-MM-DDの解析は環境によって異なる動作をする可能性があります。日付のみを気にする場合は、現地時間で日付を作成します:new Date(year, monthIndex, day). - 閏日の誕生日: 閏年以外の 2 月 29 日のルールを決定します (2 月 28 日または 3 月 1 日)。一貫性を保ってください。
- 無効な入力: DOB が将来の日付ではなく実際の日付であることを検証します。
簡単なオプション: オンライン年齢計算ツールを使用する
あなたが答えが必要な場合(または実装を検証したい場合)は、無料の計算ツールを使用してください: オンラインで年齢を計算する。
関連ガイド
よくある質問
年齢を計算する最も正確な方法は何ですか?
ほとんどの場合、「完済年数」(整数の年齢)が標準です。完全な内訳が必要な場合は、最初に年、次に月、次に日を計算し、月の長さや閏年などの特殊なケースをテストします。
JavaScript が日付文字列に間違った日を与える場合があるのはなぜですか?
新しい日付('YYYY-MM-DD')は、一部の環境では UTC として解釈される可能性があるためです。ローカルのカレンダーの日付が気になる場合は、部分を解析して new Date(y, m, d)] を使用します。