年齢計算
生年月日から満年齢を年・月・日で正確に。総日数、次の誕生日、生まれた曜日も表示します。
すべてブラウザ内で動作します。入力した内容はアップロードされません。
ReadoutKit / Takashi Yamazaki が執筆・保守しています
仕組みと使い方
引き算では済まない部分
満年齢を「何歳」まで出すのは簡単です。年の差を取り、その年の誕生日がまだなら1を引く。 問題は残りを「か月」と「日」で表すところで、 自前の計算がたいてい壊れるのもここです。
つい、日付を3桁の数字のように扱って桁を借りたくなります。 しかし実在の日付では破綻します。1月31日生まれの3月1日時点で、 日の桁は 1 − 31 = −30。2月の28日を借りてもまだ −2 が残ります。 これ以上借りても意味のある答えにはなりません。 そもそも問いの立て方に無理があるからです。 1月31日の「1か月後」は、存在しない日付を指しています。
機能する方法は、遡るのではなく数え上げることです。 生年月日に満月数を足していき、あと1か月足すと基準日を越える手前で止める。 足した先の月が短ければ末日に丸める。そして残りを日数で測ります。 1月31日の1か月後は2月28日で、3月1日はその1日後。つまり1か月1日です。 同じ手順で、3月31日生まれの5月1日時点も1か月1日になります。 4月は28日ではなく30日ですが、それでも同じ答えになる。 この一致が、方法が偶然ではなく筋の通ったものである確認になります。
月の加算は元に戻せない
身につけておく価値のある帰結があります。月単位の計算は情報を失います。 1月31日の1か月後は2月28日。そこから1か月引くと1月28日で、1月31日には戻りません。 末日への丸めが3日ぶんを捨てており、それを取り戻す手段はありません。
日付ライブラリごとに月の計算結果が食い違うのも、 契約書で「1か月後」と書くときに月末の扱いを明記することが多いのも、これが理由です。 特定の実装の不具合ではなく、月の長さが揃っていない暦の性質です。 月の加算をきれいで可逆なものとして見せるツールは、 問題を解決しているのではなく隠しています。
2月29日生まれ
2月29日生まれの人の誕生日は、およそ4年に1度しか存在しません。 残りの3年は暦に該当する日が無く、何らかの慣習を選ぶ必要があります。
この計算機は2月28日を採用し、実際にその日付が巡ってきた回数を別に表示します。人が知りたがるのはむしろ後者で、予想より小さい数字になります。下は2000年2月29日生まれの人を、5つの日付で見たものです。
| 判定日 | その日が何か | 年齢 | 実際の誕生日 | 通算日数 |
|---|---|---|---|---|
| 2026-02-27 | 2日前 | 25歳 11か月 29日 | 6 | 9,495 |
| 2026-02-28 | 平年。応当日はここに着地する | 26歳 0か月 0日 | 6 | 9,496 |
| 2026-03-01 | その翌日 | 26歳 0か月 1日 | 6 | 9,497 |
| 2028-02-28 | うるう年。まだ | 27歳 11か月 30日 | 6 | 10,226 |
| 2028-02-29 | 本物の誕生日 | 28歳 0か月 0日 | 7 | 10,227 |
2026年2月28日の時点で、この人は通常の数え方では26歳ですが、実際に迎えた誕生日は6回です。7回目は2028年2月29日まで来ません。そのとき年齢は28歳になっているので、実際の誕生日が1つ増えるあいだに年齢は2つ増えます。
日本の法律は別の経路から2月28日という結果に至ります。年齢計算ニ関スル法律のもとでは、年齢は応当日の前日の終了時点で加算されるため、その年に29日があるかどうかに関わらず、加齢は2月のうちに起こります。3月1日と定める制度もあります。就学、免許、成年など法的な境界が関わる場面では、計算機ではなく適用される規定が答えを決めます。
平均ではなく実日数で数える理由
ここでの総日数と総週数は、暦日の差を取った正確な数です。満月数は応当日を通過した回数の正確な数え上げです。いずれも平均の月の長さから導いたものではありません。通算日数の区切りを見ると、その違いが分かります。
| 区切り | 到達日 | その日の年齢 |
|---|---|---|
| 10,000日 | 2017-10-31 | 27歳 4か月 16日 |
| 20,000日 | 2045-03-18 | 54歳 9か月 3日 |
| 30,000日 | 2072-08-03 | 82歳 1か月 19日 |
10,000日は27歳4か月16日です。365.25で割れば27.38年と出ますが、その小数部分が何か月何日なのかは、その小数がどの月をまたいだかによって変わるため、割り算からは出てきません。正確な答えには平均ではなく暦が要ります。
他のツールと突き合わせるときにも同じ区別が効きます。総日数を30.44で割った値は満月数と一致しません。36歳の人でおよそ0.6か月ずれますが、どちらも間違いではなく、違う問いに答えているだけです。平均は長い期間では有用な近似で、短い期間では劣ります。
タイムゾーンを持ち込まない理由
生年月日は暦日であって、時刻を持つ瞬間ではありません。 時刻を付けると、年齢の計算に本来無関係な問題が入り込みます。 夏時間の切り替えで区間の長さが変わり、 質問した人がどこにいるかで結果が変わってしまいます。
ここでの処理はすべて年・月・日だけを扱い、内部では UTC に固定しているので、 ローカルのオフセットが境界を動かすことはありません。 オークランドでもロサンゼルスでも同じ答えになります。 日付についての問いに対しては、これが正しい挙動です。 別の場所で再読み込みしても結果は安定し、 あなたの所在地は計算に必要でも、送信されることもありません。
よくある質問
- 2月29日生まれの誕生日はいつですか?
- この計算機は平年では2月28日に加齢し、実際にその日付が巡ってきた回数を別に数えます。2000年2月29日生まれの人は2026年2月28日で26歳ですが、実際に迎えた誕生日はその時点で6回だけです。7回目は2028年2月29日で、そのとき年齢は28歳になります。日本の年齢計算ニ関スル法律も、応当日の前日の終了時点で加齢するため、別の経路から同じ2月という結果になります。3月1日と定める制度もあるので、法的な境界が関わる場面では計算機ではなく適用される規定が答えを決めます。
- 生まれてから10,000日目はいつですか?
- 1990年6月15日生まれなら2017年10月31日で、そのとき27歳4か月16日です。計算機が必要な理由は、10,000を365.25で割っても27.38年までしか出ないからです。残りの0.38年が何か月何日になるかは、その期間がどの月をまたいだかで変わります。このツールは実際の暦日を数えているので、平均の年ではなく、あなたの生年月日に対する答えが出ます。
- なぜ数字を引き算するだけでは年齢が出ないのですか
- 月の長さが一定でないため、日と月の桁を十進数のように借用できないからです。1月31日生まれの3月1日時点を考えてみてください。日の引き算は −30 になり、2月の28日を借りてもまだ −2 が残ります。正しく動く方法はいずれも、生年月日から満月数を数え上げ、残りを日数で測るという手順を踏みます。それが「1か月1日」という、人が意図している答えになります。
- 2月29日生まれの平年の扱いはどうなりますか
- 正解はなく、慣習があるだけです。この計算機は平年の応当日を2月28日として扱い、実際にその日付が巡ってきた回数を別に表示します。およそ4年に1度です。日本の年齢計算ニ関スル法律は別の経路で同じ結果に至ります。年齢は誕生日の前日の終了時点で加算されるため、その年に29日があるかどうかに関わらず、2月のうちに加齢するからです。制度によっては3月1日とするものもあります。法的な期限が関わる場合は、実際に適用される規定をご確認ください。
- 満月数が総日数を30で割った値と合いません
- 合わなくて正常です。ここでの満月数は、応当日を何回通過したかの正確な数え上げで、平均の月の長さから導いたものではありません。総日数を30や30.44で割った値は平均に基づく近似で、どの月もその長さちょうどではありません。長い期間では有用な近似ですが、短い期間では月あたり1日半ほどずれます。両者は違う問いに答えています。
- タイムゾーンによって結果は変わりますか
- 変わりません。ここでの計算はすべて時刻を持たない暦日に対して行い、内部では UTC に固定しています。これは見た目以上に重要です。ローカル時刻の2点を引き算すると、夏時間の切り替えを跨ぐ区間が23時間や25時間になり、切り捨てを伴う割り算では暦上の日数より1日少なく出ます。日付を日付として数えているので、どこで実行しても答えは同じです。
- 過去や未来の日付時点の年齢も出せますか
- 出せます。2つ目の入力欄がそのためのものです。初期値は今日ですが、任意の日付に変えればその時点の満年齢が求まります。年齢計算機が必要になる場面はむしろこちらが多いはずです。入学や申込みの基準日における該当可否、過去の出来事の時点での年齢、保険の満期時の年齢などです。
出典
このツールが使っている計算式と税率・基準値は、下記の資料に基づいています。制度は改正されます。ここの数字と出典が食い違う場合は、出典が正しいものとお考えください。
2026年9月1日 時点で、下記の出典と数値を突き合わせています。
- ISO 8601 — Date and time formatInternational Organization for Standardization
- RFC 3339: Date and Time on the Internet — TimestampsIETF