コンテンツにスキップ

年齢計算機 — 年、月、日での正確な年齢

生年月日を入力すると、年・月・日の単位での正確な年齢をすぐに計算する無料の年齢計算機。総週数、総日数、総時間数も同時に表示するほか、次の誕生日までの残り日数もわかるので、記念日の確認や年齢を証明する書類の作成準備、周囲へのお祝いの贈り物の計画づくりにも幅広く役立てられる。

年齢計算機

正確な年齢
36 年 7 ヶ月 26 日

あなたは Monday

次の誕生日: 127日後 (37歳になります)

他の単位での年齢

ヶ月
439
週
1,912
日
13,387
時間
321,288
分
19,277,280
秒
1,156,636,800

人生の進捗

あなたの年齢と、説明的な80年の参照期間。

年齢の視覚化3636 / 80 年080
ローディング計算機...
📚

ドキュメンテーション

年齢計算機とは何ですか?

年齢計算機は、生年月日と通常は今日である基準日の2つの日付の間の正確な期間を求めます。結果は年、月、日で示されるほか、月、週、日、時間、分、秒の累計でも示されます。過去または未来の日付を基準に年齢を計算することもでき、その日に何歳だったか、または何歳になるかを確認できます。

年齢の計算方法

年齢とは、2つの暦日付の間隔です。この間隔を表す正しい方法は2つあり、目的に応じてどちらも役立ちます。

暦による年齢(年、月、日)

これは、「33歳、4か月、5日」のように、日常的に年齢を表す方法です。次の3段階で求めます。

  1. 生年月日から経過した満年数を数える。
  2. 直近の誕生日から経過した満月数を数える。
  3. そこから残りの日数を数える。

1か月の日数はすべて同じではないため、月末近くでは手順3が難しくなります。1月31日生まれの人を3月1日時点で計算すると、年齢は1か月と1日です。1月31日の1か月後は2月28日です(うるう年では2月29日)。2月31日は存在しないためです。その翌日は3月1日です。この方法は、普及に貢献したPythonライブラリにちなんでrelativedeltaルールと呼ばれることもあり、短い月では記念日の日付をその月の末日に合わせます。これにより、日数が負になることを防ぎます。

経過時間の合計(日、時間、秒)

経過した時間を正確に数えるには、両方の日付を1つの時点に変換し、その差を満日数で求めます。

d=⌊t−b86400000⌋d = \left\lfloor \frac{t - b}{86400000} \right\rfloor

dは経過した日数、tは基準日、bは生年月日を表し、それぞれミリ秒単位の数値として扱う。除数は1日あたりのミリ秒数である。

引き算の前に、両方の日付をUTC(協定世界時)の午前零時に設定します。これにより、夏時間の変更によって1時間が加算または減算され、日数がずれることを防ぎます。日数の合計から、週数は日数を7で割って切り捨てます。時間、分、秒は、日数にそれぞれ24、1,440、86,400を掛けて求めます。

経過日数の合計を365または365.25で割ると、年単位のおおよその年齢が得られますが、その期間に含まれる年のうち、どれがうるう年かは考慮されません。上で説明した暦による計算は正確です。「私は何歳ですか」という問いには暦による年齢を使います。服薬時刻の計測や、記念日までのカウントダウンなど、正確な経過時間が必要な処理には、合計日数または週数を使います。

計算例

2000年1月1日生まれの人を、2020年1月1日時点で計算した場合:

項目値
暦による年齢20年、0か月、0日
合計月数240
合計週数1,043
合計日数7,305
合計時間175,320
合計分数10,519,200
合計秒数631,152,000
生まれた曜日土曜日

合計7,305日は、20年 × 365日に、うるう年である2000年、2004年、2008年、2012年、2016年の5回のうるう日を加えたものです。これらの年にはそれぞれ、20年間の期間内に二月29日が加わります。そのため、日数は単純な20 × 365より多くなり、手計算では数日分の誤差が生じやすくなります。

コードによる年齢計算式

上記の暦による年齢計算法は、ほとんどのプログラミング言語で実装できます。うるう年や月の日数の規則を手作業で記述するより、組み込みの日付ライブラリを使うほうが安全です。

1from dateutil.relativedelta import relativedelta
2from datetime import date
3
4birth, target = date(2000, 1, 1), date(2020, 1, 1)
5
6age = relativedelta(target, birth)     # calendar age
7print(f"{age.years}y {age.months}m {age.days}d")
8
9total_days = (target - birth).days     # total elapsed days
10print(total_days)                      # 7305
11

Microsoftは、"md"引数について、月の境界付近では負の数や誤った 日数を返すことがあると警告しています。そのため、この式の残りの日数の部分は、上記の月末に合わせる規則と 常に一致するとは限りません。

よくある質問

自分の正確な年齢を知るにはどうすればよいですか? 生年月日を入力し、基準日は今日のままにします。結果には、年、月、日による年齢と、合計日数、週数、時間数、秒数による同じ年齢が表示されます。

2つの年齢計算機で答えが異なるのはなぜですか? 通常は、月の境界付近で残りの日数をどのように数えるかが違うためです。上で説明したように月末に、その月の短い日数に合わせて調整する計算機は、経過時間を単純に30で割る計算機と、1日または2日異なることがあります。

計算ではうるう年が考慮されますか? はい。合計日数には、2つの日付の間にあるすべての2月29日が含まれます。2月29日がない年では、うるう日に生まれた人の誕生日は、その月の末日である2月28日として数えます。1996年2月29日生まれの人は、2023年2月20日時点で26歳、11か月、22日です。次の誕生日は8日後の2023年2月28日になります。

過去または未来の日付について年齢を計算できますか? はい。基準日を未来の日付にすると、その日に何歳になるかがわかります。過去の日付にすると、その時点で何歳だったかがわかります。生年月日自体を未来の日付にすることはできず、基準日を生年月日より前にすることもできません。

タイムゾーンは結果に影響しますか? いいえ。日数を数える前に両方の日付をUTCの午前零時に変換するため、ユーザーの所在地や夏時間の変更にかかわらず合計は同じです。

日数を365.25で割った結果と日数のカウントが異なるのはなぜですか? 365.25は1年の平均的な長さにすぎず、その期間に含まれる具体的な年のうち、どれが366日間のうるう年かは追跡しません。実際の2つの暦日付の間にある満日数を数える方法は正確です。

出典

  1. Python dateutil — relativedelta、上記の暦による年齢の月・日の規則。
  2. Javaプラットフォーム — Period.betweenおよびChronoUnit.DAYS。
  3. Microsoft Excel — DATEDIF関数。
  4. MDN Web Docs — Date。
  5. Dershowitz, N., & Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press、2018年。