Command Palette

Search for a command to run...

年齢計算: 正確な年齢を年、月、日数で計算する方法

年齢計算: 正確な年齢を年、月、日数で計算する方法

T
Toolz Team
|Jul 18, 2026|23 分読んでください

電卓 コレクションの一部

日付は単純で、そうでないだけです。それが理由です RFC 3339 タイムスタンプがインターネット上で何を意味するかを特定するために存在します。

私が最初に発送した年齢のバグはサインアップフォームでした。ルールは紙の上では十分に単純でした。ユーザーは少なくとも 18 歳でなければなりませんでした。実装は、最初のパスで全員が書いたものでした。2 つのタイムスタンプの差分を取り、365.25 日で割って、床に置きます。テスト器具は 1980 年代の誕生日であり、境界線を快適に越えていたため、テストでは機能しました。2 月 29 日生まれのユーザーの生産では失敗しました。ユーザーは 18 歳の誕生日の朝に 17 歳だったと言われましたが、当然のことながら、彼は満足していませんでした。

それが年齢についてのことです.誰もがそれが何を意味するのか知っています,誰もそれを計算する方法に同意しません,そしてナイーブバージョンは境界でのみ表面化する方法で間違っています - うるう日,月は終わります,誕生日の前日.1年は365日ではありません.30日ではありません. " 31 January&quotの1か月後; 単一の正解はありません,そしてあなたが選んだ答えは結果を変えるまで、このどれも問題ではありません:あなたが資格をチェックしているまで, 欲しいフォームに記入 "年と月, " 年金日を計算,またはなぜあなたのフォームは彼が17歳だと思うユーザーに説明。

私は生活のための開発者ツールを構築します - [Toolz.dev] (/, WP Adminifyプラグイン, LaravelとReactアプリのスタック - そして、日付算術は、私が手でやめることを学んだバグのカテゴリです 年齢計算 on Toolz.dev は、生年月日と目標日を取得し、平均月の近似値ではなく実際の暦計算で計算された、年、月、日としての正確な年齢を提供します。また、人々が実際に要求する合計値 (日数、週数、時間) に、生まれた平日とその次の誕生日までのカウントダウンを加えます。

このガイドでは、ツールの機能、算術がどのように機能するか、そして本当に難しいケースがどこにあるかを説明します。 番号だけが必要な場合は、計算機はワンクリックで移動できます。 コンプライアンス担当者に年齢の計算を弁護する必要があった場合は、The Deep Dive をお読みください。

tl;dr: 正確な年齢は、年、次に月、次に日で、前の月の真の長さから借用した日数 - 30 日の平均からではありません うるう日はカウントされます 2月29 日の誕生日は、うるう年以外の3月1 日として扱われます 年齢計算 ブラウザ内のすべてを適用し、合計を日、週、時間、分で表示し、生年月日をどこにも送信しないでください。

主な機能

予定表に沿った年月日数

見出し番号は正確な内訳です: 33 年、11 か月、28 日。 "33.97 年、" " ではなく、"407 か月、" しかし、フォームと登録官が要求する 3 つの部分からなる数値。 days コンポーネントは、対象日の前の月の実際の長さから借用して計算されます。 3 月 14 日に測定している場合、借用は 2 月から得られます。 - ほとんどの年は 28 日、閏年は 29 日 - 概念的な 30 日の月からのものではありません。その 1 つの詳細は、カレンダーに一致する結果と、季節によって 1 ~ 2 日ずれている結果の差です。

うるう年と2月29日の取り扱い

うるう日はすべての合計でカウントされ、2 月 29 日の誕生日ケースは、偶然のままではなく、明示的に処理されます。 計算機は、うるう日の誕生日を、2 月 29 日のない年の 3 月 1 日に落ちるように扱います。それは、あなたに代わって黙って決定を下すのではなく、出力ではそう言っています。 これは、最も慣習法の法域が使用する慣習であり、年齢の内訳と次の誕生日のカウントダウンの両方に一貫して適用されるため、2 つが互いに矛盾することはありません。

全額の内訳

見出しの下に、人々が実際に検索した数字が表示されます: 合計月、合計週、合計日数、合計時間、合計生存時間。それらのすべては 2 つの日付間の正確なカレンダー距離から導出されるので、閏日が含まれており、何も丸められていません " 平均年" 365.25 日。 2000 年 1 月 1 日に生まれた場合、2025 年 1 月 1 日の生後 9,132 日 - 365 日の 25 年間とその間の 7 つの閏日。

次の誕生日のカウントダウン

このツールは、次の誕生日の日付、平日が過ぎて、年齢、何日も報告されます。 平日は思ったよりも重要です。誕生日が 2 年の火曜日に上陸することを知っていると、何かを計画することと、その前の週に問題を発見することとの違いがあります。 目標日が誕生日である場合、ツールは 1 年先を延ばすのではなく、そう言っています。

今日だけでなく、いつでも年齢を重ねる

2 番目のフィールドはデフォルトで今日に設定されていますが、完全に編集できます。 「ポリシーが開始されたとき、または将来の日付である」と答えるには、「彼は登録の締切によって 16 歳になるか」という回答を過去の日付に設定します。適格性ルールは、ほとんどの場合、特定の日付の年齢として表現されます。その計算は、間違いが忍び寄る場所です。

明確な検証、サイレント 間違った答えではない

解析できない日付、2 月 30 日、13 か月のような不可の日付、または対象日のあとの生年月日など、すべて特定のエラー メッセージを生成します。 計算機は否定的な年齢を返さない。 Invalid Date、または NaN。 入力の何が問題なのかを正確に伝えることは、信頼できない数よりも価値があります。

100% クライアント側

すべての計算は、プレーンな JavaScript でブラウザで実行されます。 生年月日はアップロード、ログ記録、保存されません。 ほとんどの場合よりも、このツールの方が重要です。生年月日は、ID 検証システムがキーをオンにする 3 つまたは 4 つのフィールドの 1 つであり、それをサーバー側の計算機に貼り付け、これを読んでいないプライバシー ポリシーが小さな回避策であるというリスクがあります。 ページがロードされると、ツールはネットワーク接続をまったく持たずに動作します。

年齢計算の使い方

ステップ 1: 生年月日を入力してください

最初のフィールドに日付を入力または選択します。任意のカレンダーの日付が機能します - 2月29 日を含み、1 世紀をはるかに超える日付を含みます フィールドはISOを取ります YYYY-MM-DD ネイティブ デート ピッカーが生成する値です。直接入力するか、ピッカーを使用できます。 計算機が解析できないものを貼り付けると、推測ではなく、予想される形式が表示されます。

ステップ 2: 測定する日付を設定します

2 つ目のフィールド、 " 日付での年齢、 " デフォルトは今日です 一般的なケースについては放っておいてください: 私は今何歳ですか 質問が別の瞬間に関するものであるときに変更してください - 契約が署名された日、試験の締め切り、学年の開始日、退職日、または記録用に再構築している過去の日付、または生年月日以降に該当する必要があるという唯一の制約があります; 電卓はその逆を拒否し、その理由を説明します。

ステップ 3: 内訳を読む

計算を押すと結果が3 つの部分で表示されます上部に、年、月、日としての正確な年齢、その間に計算された2 つの日付で その下に、2 枚のカード: あなたが生まれた平日、そしてその日付、その平日、あなたが回す年齢、そして残りの日数を持つ次の誕生日、そして最後に、合計テーブル - 月、週、日、時間、分 - それぞれが正確に何をカウントするかを説明する短いメモ付きで、なぜなら " total months" と " total days" は異なる方法でカウントされ、明示的になる価値があります。

ステップ 4: 概要をコピーする

コピーボタンはクリップボードに平たく英語の概要を載せます年齢、対象日、平日生年月日、合計日数ですフォーム、メール、サポートチケット、レコードに貼り付けるときに必要なフォーマットですそれからいずれかの日付を変更して再度計算します - リセットする状態はなく、サーバーへの往復もありません。

技術的な深い潜水: 年齢算術が見た目よりも難しい理由

年は 365 日ではなく、1 か月は 30 日ではありません

グレゴリオ暦の年は平均して 365.2425 日です。だからこそ、4 で割り切れる年に閏日を挿入し、100 で割り切れる年に飛ばし、400 で割り切れる年に元に戻します。 2000 年が閏年であり、1900 年がそうではなかったのです。年齢算術の結果は直接的です。経過日を 365 で割って年齢を計算すると、およそ 4 年ごとに 1 日が取得され、計算は誕生日の近くで測定された人のカレンダーと合わないことになります。 365.25 で割った方が良いですが、それでも間違っています。なぜなら、それは世紀の境界を越えて逆方向に漂うからです。

月の問題はさらに悪化します。月は単に不規則であるだけではありません。曖昧です。月は 28、29、30、または 31 日です。防御可能な平均はありません。 " 1 か月 " を固定日数として扱う計算は、人間がカレンダーに数えることに同意しない年齢を生成します。

フィールドごとの減算アルゴリズム

正しいアプローチは、まったく日数に変換しないことです。 フィールドごとにフィールドを減算することで、フィールドが負になると、2 つのマルチ桁数を手で引くのとまったく同じです。

1990 年 3 月 15 日、2024 年 3 月 14 日の生年月日を取る。

  • 年: 2024 − 1990 = 34
  • 月: 3 − 3 = 0
  • 日: 14 − 15 = −1

日のフィールドは否定的ですので、1 か月借りてください。 重要な質問は次のとおりです。 月何日? 答えは、目標日の直前の月の長さです。 目標は 2024 年 3 月で、前月は 2024 年 2 月で、2024 年はうるう年であるため、29 日あります。 借りると、次のことが与えられます

  • 月: 0 − 1 = −1
  • 日: −1 + 29 = 28

現在、月のフィールドは負であるため、1 年を借ります: 年 34 − 1 = 33、月 −1 + 12 = 11。 最終的な答えは 33歳11ヶ月28日 - 34歳の誕生日が1日足りないのですが、それはまさにその通りです。

逆に確認できます: 1990 年 3 月 15 日、33 年は 2023 年 3 月 15 日です。 プラス 11 か月は 2024 年 2 月 15 日です。 2 月 15 日から 3 月 14 日までの 2 月末日 (その年は 29 日) に加えて、28 日である 3 月までの 14 日です。 2 つのメソッドは、日付アルゴリズムに必要なプロパティである同意します。

これが暴露する罠に注意してください。同じ計算がうるう年以外の年に実行された場合 - 1990年3月15 日から2023年3月14 日まで - 借入は28 日間の2 月から来て、答えは33年11 ヶ月になります、 27 日。 誕生日と同じ関係、その日数が異なるため、その間の月は長さが異なります。 それはバグではありません。 それが「月と日」の意味です。

借りるだけでは不十分な場合がある

これは、ほとんどの手巻き実装を破るケースです。 生年月日 2023 年 1 月 31 日、2023 年 3 月 1 日の目標:

  • 日: 1 − 31 = −30
  • 2 月の借り入れ (28 日): -30 + 28 = −2

まだマイナスです。 1 回の借入では、誕生日の月の長さがターゲットの前の月の長さを超えると不十分です。修正は、その前の月 - 1 月、31 日 - から再度借入し、29 日と 0 か月を与えることです。答えは 0 年、0 か月、29 日です。これは、まさに 2 つの日付の間の暦日の数です。実装が 1 回だけ借りると、これらの入力に対してマイナスの日数フィールドが生成され、31 日生まれのユーザーが苦情を申し立てるまで誰も気づきません。

なぜ「1 か月後」という正解がないのか

1月31日から1ヶ月後は? 2 つの弁護の答えがあり、基準はそれを解決していません。

  • クランプ: 対象月の最終有効日 - 2月28 日 (うるう年には29 日) にロールバックします これが最もスプレッドシートである EDATE 関数と多くの日付ライブラリがそうです。
  • ロールフォワード: 翌月 - 3月3 日にオーバーフローします これはナイーブです setMonth() 算術は JavaScript で実行されます。そのため、非常に多くの日付バグが 3 日後のエラーのように見えるのはそのためです。

どちらも間違っていませんが、同じシステムで両方を使用することはできません。 年齢計算は、2 月 29 日のルールを一貫性のあるものにするのは、規則であるため、一貫してローリング フォワード コンベンションを適用します。29 周年の月間が 3 月 1 日、31 日が次の月に入った月の記念日も、次の月に向けて一貫して適用されます。 上記の借用アルゴリズムは、特別なケーシングを使用せずに、まさにその動作を生成します。これが、それを好む理由の 1 つです。 どこにでも適用される単一のルールは、例外の山を打ち負かします。

2月29日の問題

1,461 人に 1 人がうるう日に生まれます。 4 年のうち 3 年で、彼らの誕生日は存在しません。 法域は何をすべきかを決定する必要があり、すべてが同じことを決定したわけではありません。

イギリス、そしてほとんどの米国の州で使用される慣習法規則の下では、人は 1 日の初めに特定の年齢に達します。 前に the anniversary of their birth - a fiction that neatly makes a leap-day baby's legal birthday fall on 1 March in a non-leap year.他のいくつかのシステムは、同じ答えに別のルートで到達し、記念日は2 月の最終日の翌日であると保持している。 new zealand and parts of Taiwan, by contrast, use 28 February.香港& #39; s解釈と一般条項条例と他のいくつかの法令は、明示的に1 つを選択して書き留める、これは賢明なことです。

年齢計算は使用します 3月1日、それが適用されると出力に記載され、年齢の内訳と次の誕生日のカウントダウンの両方に一貫して適用されます。 2000 年 2 月 29 日に生まれた人は、2023 年 2 月 28 日に 22 歳 11 か月 30 日で、2023 年 3 月 1 日に 23 歳になります。 ローカル ルールが 2 月 28 日の場合、カウントダウンから 1 日を差し引いて、合計日数はどちらの方法でも影響を受けません。これは、純粋なカレンダーの距離であるためです。

異なるシステムがどのように年齢を考慮しているか

上記のすべては、出生時から数えられる年代順の年齢を前提としています。これは国際標準であり、ほぼすべての法律および医療制度が現在使用しているものであり、現在使用されている唯一の制度ではありません。

伝統的な東アジアの年齢計算では、新生児は出生時に1歳と数えられ、個人の誕生日ではなく旧正月に全員に1年追加されました。新年の前日に生まれた赤ちゃんは2日後に2歳とみなされます。韓国は、国際年齢を法的に標準化し、その日の報告で全人口を一晩で1~2歳若くした2023年6月まで、日常生活の中でこの習慣を最も長く維持していた。中国、日本、ベトナムは数十年前に国際年齢に移行していましたが、伝統的なカウントは文化的および占星術的な文脈で生き残っています。

他の 2 つの計算は、実際のドキュメントに表示されるため、知っておく価値があります。 妊娠期間産科で使用され、生理中の最後の月経の最初の日から数えられ、胚の年齢より約 2 週間早く走ります。 あんど 最後の誕生日の年齢年齢が最も近い誕生日 保険引受の実況の違いです。最近になった年齢に応じた保険料もあれば、最も近い年齢の保険料もあります。これは、誕生日から 6 か月以上経過した人の場合は 1 年と異なる場合があります。 フォームがあなたの年齢を尋ね、その答えが経済的に重要な場合は、それがどのようなものを意味するかを知る価値があります。

タイムゾーンと、なぜこのツールがそれらを無視するのか

生年月日はカレンダーの日付であり、瞬間ではありません。タイムスタンプとして保存し、別のタイムゾーンにレンダリングすると、1 日ずれる可能性があります。誕生日が一方の半球のユーザーにとっては 14 日、もう一方の半球では 15 日として表示される古典的なバグです。 Age Calculator は、真夜中にアンカーされた日付に UTC ですべての算術演算を行うことでこれを完全に回避します。 1 時間を追加または削除する夏時間遷移では、真夜中の境界を越えて日付を押し出すことはできず、平日の誕生日の数字はどこに座っていても安定します。時間と分合計は、同じ理由で真夜中から真夜中にカウントされます。つまり、壁時計の測定値ではなく、日数の正確な倍数です。

よくある使用例

資格と締め切り日

年齢を含むほとんどすべてのルールは、特定の日付の年齢として表現されます。 就学率のカットオフ、運転免許の資格、年齢制限のある販売、年金資格、保険バンド、サービス面での最低年齢。 問題は「この人は何歳ですか」ではありませんが、「この人は、該当する日付に何歳になるのか」、編集可能な対象フィールドが要点です。 日付をカットオフに設定し、年数の数字を読みます。

何年も何ヶ月も必要なフォーム

移民申請書、医療摂取用紙、学校記録、居住書類には、年齢が年月単位、または年、月、日単位で定期的に尋ねられます。これには近道がなく、小数点から導き出す方法もありません。適切に計算する必要があり、受け取りオフィスが計算するものと一致する必要があります。そのため、カレンダー借用方法が重要です。これは、フォームの反対側の人が行っていることです。

年齢ロジックをアプリケーションに組み込む

年齢チェックを実装している場合、ルールは次のとおりです。経過ミリ秒を年定数で決して除算しない カレンダーフィールドを比較する 最小限の正しい 18 プラスチェックは、生年月日からちょうど 18 年後に日付を構築し、今日がオンかその後かをテストすることです - そして、2 月 29 日にシステムが何を行うかを意図的に決定します 年齢計算 これらのテストを作成するときに境界フィクスチャを生成するには: 誕生日、その日、うるう日、月の 31 日のケース。 4 つのテスト ケースは、生産に到達する基本的にすべての年齢のバグを検出します。

マイルストーン、記念日、そして「何日」の質問

10 千日前ということは、27 歳の誕生日のどこかにある、真のマイルストーンです。 10 億秒の誕生日はおよそ 31.7 歳である。 合計表はこれらに直接答え、平日の生年月日の数字は、人々がいつも尋ねる他の質問に答えます。 次の誕生日のカウントダウンは、平日であり、数週間以上の計画に非常に役立ちます。

記録の再構築

あなたが歴史的なデータを監査しているとき - 医療記録、給与入力、古い契約 - あなたはしばしば、誰かが過去に日付の数年上に何歳だったかを知る必要があります両方のフィールドを明示的に設定し、ツールはそれに対して何の仮定もせずに答えます " now." これはまた、レガシーシステム& #39; sストアドエイジフィールドがこれまで正しかったかどうかを確認する最速の方法であり、私の経験では、これは尋ねる価値のある質問です。

なぜブラウザで年齢を計算するのですか?

Toolz.dev でのすべての計算 年齢計算 クライアント側で実行されます 入力したものは送信、ログ、保存されず、ページはロードされるとネットワーク接続なしで動作し続けます 生年月日は中立的なデータではありません - 身元確認、パスワードのリセット、クレジット アプリケーションのキーをオンにするフィールドの 1 つです。ブラウザがミリ秒以内に実行できる減算を実行するためだけに、サーバーに渡す理由はありません。

あなたの仕事に誕生日以外のデートが含まれている場合、 日付差分計算 一般的な間隔の場合を処理します。 タイムスタンプ コンバーター ログの UNIX エポック値の中に日付がトラップされるときのツールです。 すべての数値については、 パーセンテージ計算 日常の算数の残りの半分を、微妙に誤解しがちな部分をカバーしています。

フェイク

年、月、日数で正確な年齢を計算するにはどうすればよいですか?

フィールドごとに、ターゲット日付フィールドから生年月日を減算します。年、月、数日、日数を指定します。 日がマイナスの場合は、対象日の前の月の日数を借り、月がマイナスの場合は、年から 12 か月間借ります。 生年月日を計算機に入力すると、その借入が自動的に適用されるため、結果は平均月の見積もりではなく、カレンダーに一致します。

月によって年齢が変わるのはなぜですか?

月は同じ長さではないからです。 28 日の 2 月からの借り入れ日は、1 月 31 日の借用とは異なる残りを与えるため、同じ人が同じ経過後の 1 か月間および「3 か月と 5 日」に「3 か月と 2 日」となることができます。 年と合計日数はあいまいで、残りの月数は、何ヶ月を超えたかによって異なります。

電卓は 2 月 29 日の誕生日をどのように処理しますか?

2 月 29 日の生年月日は、2 月 29 日のない年の 3 月 1 日のように扱われます。 2000 年 2 月 29 日に生まれた人は、2023 年 3 月 1 日に 23 歳になり、2023 年 2 月 28 日に 22 歳で 11 か月と 30 日です。 これは、2 月の最終日の翌日である、最もよく慣習法の法域が適用される規則と一致しています。

うるう年は総日数に含まれますか?

はい。 合計日数は、2 つの日付間の実際のカレンダー距離から計算されるため、2 月 29 日間隔でカウントされます。 合計日数を 365 で割ると、年齢が正確に一致しないのはそのためです。平均グレゴリオ年の年は 365.2425 日です。

将来または過去の日付で自分の年齢を計算できますか?

はい。 2 番目の日付フィールドはデフォルトでは今日に設定されますが、生年月日以降の任意の日付に設定できます。 これは、自分で算術を行うことなく、カットオフ - 就学時の年齢、ポリシーの開始日、ライセンス資格のある日付、または契約書の署名 - で年齢を確認する方法です。

年齢は世界中どこでも同じですか?

必ずしもそうではありません。 ほとんどの国では、誕生からの年齢を数えて使用します。これは、この計算機が返すものです。 東アジアの伝統的な年齢では、新生児を 1 歳と数え、新年ごとに 1 年を追加しました。これにより、年齢よりも 2 歳になる可能性があります。 韓国は 2023 年 6 月に国際年齢に合法的に標準化されましたが、伝統的な数は依然として文化的背景に現れています。

私は何曜日に生まれましたか。

計算機は、生年月日の平日を直接報告します。 これはグレゴリオ暦から派生したものであるため、カレンダーが採用されてからの日付に対して正確であり、すべての算術演算は UTC で行われるため、ローカルのタイムゾーンに依存しません。

私の生年月日は保存されていますか、またはどこかに送信されていますか?

いやー 。 計算機は、プレーンな JavaScript を使用して、ブラウザーで完全に実行されます。 入力したものは何も送信されません。また、ページがロードされた後も、インターネット接続なしでツールは引き続き機能します。


Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!