日付間隔計算ツール
2つの日付間の日数、週数、月数、年数を計算
2つの日付間の間隔を計算
日付間隔計算ツールとは?
日付間隔計算ツールは、2 つのカレンダー日付の差を測り、日数、週数、概算の月数、概算の年数、さらに時間や分などの単位で表示するツールです。プロジェクト期間、休暇範囲、請求期間、記念日、保存期間、過去の出来事からの経過日数を確認するときに役立ちます。結果は日付の差であり、開始日と終了日の両方を必ず含めた日数ではありません。たとえば 1 月 1 日から 1 月 3 日までは、通常 2 日差です。月や年は各月の日数が違うため近似になります。営業日、祝日、タイムゾーン、法的期限を扱う場合は、別のルールで確認してください。
使い方
使い方
- 開始日を入力してください
- 終了日を入力してください
- 「差分を計算」をクリックすると、2つの日付が比較されます
- 結果を表示:日数、週数、月数、年数、時間、分、秒
計算ルール
- タスクが排他的な区間を求めるのか、包含的にカウントするのかを確認してください。ビジネスルールでは開始日と終了日の両方を含めて数える場合が多いです。
- タイムゾーンをまたぐ作業では、特に時間・分が重要な場合、まず両方の日付を同じタイムゾーンに変換してください。
利用シーン
仕組み
正確な日数は Math.floor((end.getTime() - start.getTime()) / 86_400_000) で計算されます。86,400,000 は DST を考慮しない 24 時間のミリ秒数です。この結果は排他的な区間(1 月 1 日から 1 月 3 日は 2 日、3 日ではない)で、2 つの瞬間の差を測定しており、カレンダーのマス数を数えているわけではありません。両端を含むカウントが必要な場合(両方の端点を含む)は結果に 1 を加えます。多くの法的・休暇・請求ルールではこの方式が要求され、人事と経理レポートの食い違いの最も一般的な原因です。週は単に days / 7、ページでは時間 = days * 24、分 = days * 1440、秒 = days * 86,400 も表示されます。 月数と年数は「概算」と明示的にラベル付けされています。暦月や暦年の長さが異なるためです。単純な方法は days / 30.436875(グレゴリオ暦の平均月長)と days / 365.2425(400 年周期のグレゴリオ暦の平均年長)で、ステータスレポートやダッシュボードには十分ですが契約には不正確です。「X ヶ月間」をカレンダー正確に求めるアルゴリズムは、年 * 12 + 月の成分を引き、終了日の日付が開始日の日付より小さい場合は 1 を減算します。これはほとんどの日付ライブラリ(date-fns の differenceInMonths、dayjs の .diff('month')、Temporal の Duration.from)と同じ計算方法です。年数計算にも同じ癖があり、2024-02-29 から 2025-02-28 はコンベンションにより 1 年(月末に丸める場合)と 0 年 11 ヶ月 30 日のどちらにもなり得ます。 うるう年はグレゴリオ暦ルール(4 で割り切れる、ただし世紀の年は 400 で割り切れる必要がある。1900 = 平年、2000 = 閏年、2024 = 閏年)に従います。2 月 29 日を含む範囲は、日数がエポックからのミリ秒に基づいて計算されるため、自動的に余分な日を拾います。タイムゾーン処理は両端点が日以下の解像度にある場合に重要です。ローカル時刻文字列から構築された 2 つの Date 値の引き算は、ローカルの UTC オフセット分ずれる可能性があり、DST 切り替えを跨ぐ範囲は名目上の 24 時間ではなく 23 時間または 25 時間になり得ます。Y2038 問題(2038-01-19T03:14:07Z での Unix time_t 符号付き 32 ビットオーバーフロー)は、JavaScript の Date がエポックの前後約 1 億日まで表現可能な 64 ビット浮動小数点数を使用するため、このページには影響しません。ただし、32 ビット C で書かれた下流システムには注意が必要です。
- 正確な日数 = Math.floor((end - start) / 86_400_000)。非 DST の 1 日は 86.4M ミリ秒。
- デフォルトは排他的計算: 1 月 1 日から 1 月 3 日 = 2 日。両端を含むカウントには 1 を加算。
- 概算月数は平均 30.436875 日、年数はグレゴリオ暦 400 年周期の平均 365.2425 日を使用。
- カレンダー正確な月数差分: (y2-y1)*12 + (m2-m1)、終了日 < 開始日なら -1。date-fns の differenceInMonths と一致。
- うるう年: 4 で割り切れる、ただし世紀の年は 400 で割り切れる必要がある(1900 = 平年、2000 = 閏年、2024 = 閏年)。
- DST 切り替えにより 23 時間と 25 時間の暦日が発生。24 時間の引き算が必ずしも暦日 1 日とは限らない。
- JavaScript の Date は 64 ビット浮動小数点数で、Unix の Y2038 問題(2038-01-19 03:14:07 UTC での 32 ビット time_t オーバーフロー)の影響を受けない。
使用例
2 年間の暦日(2025-01-01 から 2026-12-31)
開始 : 2025-01-01
終了 : 2026-12-31
日数 : 730
週数 : 104.29
月数 : 約 24.00
年数 : 約 2.00
備考 : 範囲内の次のうるう年は 2028 年。期間を延長すると 2028 年 2 月 29 日が含まれます。短い期間(3 日)
開始 : 2026-06-11
終了 : 2026-06-14
日数 : 3
時間 : 72
分 : 4320
秒 : 259200
両端を含むカウント: 4 日年をまたぐプロジェクト期間
開始 : 2026-01-15(キックオフ)
終了 : 2026-07-20(本番リリース)
日数 : 186
週数 : 26.57
月数 : 約 6.16
用途 : ステータスレポート、振り返り、ガントチャートのサマリー日数による年齢計算
誕生日 : 1995-03-15
本日 : 2026-06-11
生存日数 : 11,411
年(概算) : 31.24
月数 : 約 374.9
正確な日数が必要な場面で便利です(節目の計算など)タイムゾーンの注意点(東京 vs ロサンゼルス)
同じ暦日 '2026-07-15' でも実際の瞬間は異なります:
東京(UTC+9) -> 2026-07-15 00:00 = 2026-07-14 15:00 UTC
ロサンゼルス(UTC-7)-> 2026-07-15 00:00 = 2026-07-15 07:00 UTC
そのまま使うと約 16 時間の差。1 日単位の結果が変わるには十分です。
対策: 減算の前に両方の日付を同じタイムゾーンに変換してください。よくある質問
2 つの日付の差はどのように計算されますか?
暦日演算で計算します。結果は「年・月・日」と、合計の週数・日数・時間・分・秒で表示されます。年と月は記念日ベース(同じ月日が経過してから初めて 1 年とカウント)で、日数は 2 つの日付間の暦日数です。
「年 + 月 + 日」の合計が、総日数とぴったり一致しないのはなぜですか?
月の日数が 28 日から 31 日まで変動するためです。「1 年 2 か月 5 日」は、関係する月が 28・29・30・31 日のいずれかによって総日数が変わります。総日数フィールドは純粋な暦日演算を使用しており、最も正確な数値です。
開始日は計算に含まれますか、含まれませんか?
このページでは開始日を含めずにカウントします。同じ日付なら差は 0 日と表示されます。「両端を含める」カウント方式(例:宿泊日数の計算)が必要な場合は、結果に 1 を手動で加えてください。
週末や祝日は除外されますか?
いいえ。このページではすべての暦日をカウントします。営業日ベースの差分(週末や任意で祝日を除外)が必要な場合は「営業日計算」ツールをご利用ください。
DST(夏時間)切り替え後に時間部分がずれて見えるのはなぜですか?
時・分の部分は絶対時刻ベースで計算されるため、夏時間の切り替えをまたぐと時刻部分が 1 時間加減算されます。日数のカウント自体は暦日ベースなので影響を受けません。
比較できる日付の最大範囲はどのくらいですか?
JavaScript の Date は Unix エポックから ±100,000,000 日の範囲をカバーするため、おおよそ ±271,000 年の範囲内なら過去・未来の任意の日付ペアを比較できます。1582 年以前の日付には先発グレゴリオ暦演算が使われ、当時実際に使われていた暦とは異なります。
計算はローカルで行われますか?
はい。両方の日付と結果はブラウザ内に留まります。アップロードもログ記録もされません。