年齢計算機 — 年、月、日での正確な年齢
生年月日を入力すると、年・月・日の単位での正確な年齢をすぐに計算する無料の年齢計算機。総週数、総日数、総時間数も同時に表示するほか、次の誕生日までの残り日数もわかるので、記念日の確認や年齢を証明する書類の作成準備、周囲へのお祝いの贈り物の計画づくりにも幅広く役立てられる。
年齢計算機
あなたは Monday
次の誕生日: 144日後 (37歳になります)
他の単位での年齢
人生の進捗
あなたの年齢と、説明的な80年の参照期間。
ドキュメンテーション
このツールが行うこと
生年月日を入力すると、あなたが正確に何歳であるかを年、月、日数で表示します。「33歳4ヶ月5日です」と言うような方法で表示されます。また、月、週、日、時間、分、秒で計算した年齢、生まれた曜日、次の誕生日までの期間も表示されます。
2番目のフィールドを今日の日付のままにすると現在の年齢が表示されます。過去または将来の日付に変更すると、その日付時点での年齢を知ることができます。
年齢計算を複雑にする1つのルール: 月と年は固定された日数ではありません。2月は28日または29日、その他の月は30日または31日です。したがって「1ヶ月」は「1ヶ月後の同じ日付」を意味し、「30日」ではありません。この計算機はそのカレンダールールに従っているため、単に30または365で割るツールとは1~2日異なる場合があります。
年齢の計算方法
年齢は2つの日付間のギャップです。このギャップを測定する2つの誠実な方法があり、このツールは両方を表示します。
1. カレンダー年齢(年、月、日)。 誕生日から満年数を数え、その後、満月数を数え、残りの日数を数えます:
- 誕生日からの満年数を計算します。
- 最後の誕生日から、満月数を計算します。
- そこから、残りの日数を計算します。
微妙な部分は月の境界付近のステップ3です。1月31日に生まれた人が3月1日に測定された場合、1ヶ月と1日です。これは「1月31日の1ヶ月後」が2月28日/29日に該当し(2月31日は存在しません)、3月1日がそれより1日後だからです。この計算機は短い月の終わりにクランプされており、広く使用されているdateutil.relativedeltaルールに対応しているため、月の終わりの誕生日は負の日数を生じません。
2. 経過時間合計(日、時間、秒)。 「他の単位での年齢」の数字については、2つの日付が丸一日の数に変換され、乗算されます:
両方の日付は最初にUTC真夜中に固定されているため、サマータイムの変更が時間を追加または削除して日数をずらすことはできません。週は日÷7(切り下げ)であり、時間、分、秒は日数をスケーリングしています。
なぜ単に日数を365で割らないのですか? ドリフトするからです。7,305日を365で割ると20.01年になります。365.25で割ると20.00になります。しかし、どちらも実際にどの年がうるう年であるか、またはあなたが実際に経験した月を知りません。カレンダー計数は正確です。日割りは近似です。「私は何歳ですか」には暦年齢を使用し、正確な経過時間計算(投与タイミング、プロジェクト期間、マイルストーンカウントダウン)には総日数/週を使用してください。
実例
2000年1月1日生まれ、2020年1月1日で測定:
| 測定方法 | 値 |
|---|---|
| カレンダー年齢 | 20年0ヶ月0日 |
| 総日数 | 7,305 |
| 総週数 | 1,043 |
| 生まれた曜日 | 土曜日 |
7,305日 = 20 × 365 + 5うるう日(2000、2004、2008、2012、2016)。この1つの詳細 - ほとんどの人が忘れている5日間の余分な日 - が、計算機が心算を上回る理由です。
コードでの年齢計算
各言語での同じ計算。カレンダー年齢の場合、手書きの算術ではなく組み込みの日付ライブラリを使用してください。既にうるう年と月の長さを知っています。
1' Whole days between two dates (A1 = birth, B1 = target):
2=B1-A1
3
4' Calendar age in complete years / months / leftover days:
5=DATEDIF(A1, B1, "y") & " years, " & DATEDIF(A1, B1, "ym") & " months, " & DATEDIF(A1, B1, "md") & " days"
61from 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
111function calendarAge(birth, target) {
2 let months = (target.getUTCFullYear() - birth.getUTCFullYear()) * 12
3 + (target.getUTCMonth() - birth.getUTCMonth());
4 const anchor = new Date(Date.UTC(birth.getUTCFullYear(), birth.getUTCMonth() + months, birth.getUTCDate()));
5 if (anchor > target) months--;
6 return { years: Math.floor(months / 12), months: months % 12 };
7}
8
9const birth = new Date(Date.UTC(2000, 0, 1));
10const target = new Date(Date.UTC(2020, 0, 1));
11const totalDays = Math.floor((target - birth) / 86400000); // 7305
121import java.time.LocalDate;
2import java.time.Period;
3import java.time.temporal.ChronoUnit;
4
5LocalDate birth = LocalDate.of(2000, 1, 1);
6LocalDate target = LocalDate.of(2020, 1, 1);
7
8Period age = Period.between(birth, target); // 20y 0m 0d
9long totalDays = ChronoUnit.DAYS.between(birth, target); // 7305
101using System;
2
3var birth = new DateTime(2000, 1, 1);
4var target = new DateTime(2020, 1, 1);
5
6int years = target.Year - birth.Year;
7if (birth.AddYears(years) > target) years--; // not birthday yet
8long totalDays = (target - birth).Days; // 7305
91#include <chrono>
2using namespace std::chrono;
3
4// C++20 calendar types
5sys_days birth = year{2000}/1/1;
6sys_days target = year{2020}/1/1;
7
8auto total_days = (target - birth).count(); // 7305
9years_months_days ymd_diff{birth, target}; // year_month_day arithmetic
101package main
2
3import "time"
4
5func main() {
6 birth := time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)
7 target := time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC)
8 totalDays := int(target.Sub(birth).Hours() / 24) // 7305
9 _ = totalDays
10}
111use chrono::{NaiveDate, Datelike};
2
3let birth = NaiveDate::from_ymd_opt(2000, 1, 1).unwrap();
4let target = NaiveDate::from_ymd_opt(2020, 1, 1).unwrap();
5
6let total_days = (target - birth).num_days(); // 7305
7let years = target.year() - birth.year(); // adjust if birthday not reached
81<?php
2$birth = new DateTime('2000-01-01');
3$target = new DateTime('2020-01-01');
4$diff = $birth->diff($target);
5
6echo "{$diff->y}y {$diff->m}m {$diff->d}d\n"; // 20y 0m 0d
7echo $diff->days; // 7305
81require 'date'
2
3birth = Date.new(2000, 1, 1)
4target = Date.new(2020, 1, 1)
5
6total_days = (target - birth).to_i # 7305
7years = target.year - birth.year
8years -= 1 if birth.next_year(years) > target
91birth <- as.Date("2000-01-01")
2target <- as.Date("2020-01-01")
3
4total_days <- as.integer(target - birth) # 7305
5よくある質問
正確には何歳ですか? 生年月日を入力して、ターゲットを今日のままにします。計算機は年、月、日での年齢を表示し、総日数、週、時間、秒で繰り返します。
別の計算機と年齢が異なるのはなぜですか? ほぼ常に月/日の余り。ツールは、月の境界での最後の満月後の日数をカウントする方法に関して意見が一致しません。このツールは短い月にクランプされます(relativedeltaの慣例)。30で割るツールは1~2日異なります。
うるう年と2月29日の誕生日に対応していますか? はい。日数には範囲内のすべてのうるう日が含まれており、2月29日の誕生日は閏年以外の年では2月28日/3月1日に対して測定され、オーバーフローしません。
過去または将来の日付での年齢を計算できますか? はい。「年齢の日付」フィールドを任意の日付に設定します。将来の日付はその時点での年齢を示し、過去の日付はその時点での年齢を示します。
タイムゾーンについて? 日付はカウント前にUTCに正規化されるため、あなたがどこにいるか、またはサマータイムが変更されたかに関わらず、丸一日の合計は安定しています。
出典
- Python
dateutil—relativedelta(このツールが従うカレンダー年齢の月/日ルール)。 - Java Platform —
Period.betweenおよびChronoUnit.DAYS。 - Microsoft Excel —
DATEDIF関数。 - MDN Web Docs —
Date。 - Dershowitz, N., & Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.