ToolActToolAct

日付間隔計算ツール

2つの日付間の日数、週数、月数、年数を計算

2つの日付間の間隔を計算

日付間隔計算ツールとは?

日付間隔計算ツールは、2 つのカレンダー日付の差を測り、日数、週数、概算の月数、概算の年数、さらに時間や分などの単位で表示するツールです。プロジェクト期間、休暇範囲、請求期間、記念日、保存期間、過去の出来事からの経過日数を確認するときに役立ちます。結果は日付の差であり、開始日と終了日の両方を必ず含めた日数ではありません。たとえば 1 月 1 日から 1 月 3 日までは、通常 2 日差です。月や年は各月の日数が違うため近似になります。営業日、祝日、タイムゾーン、法的期限を扱う場合は、別のルールで確認してください。

使い方

使い方

  1. 開始日を入力してください
  2. 終了日を入力してください
  3. 「差分を計算」をクリックすると、2つの日付が比較されます
  4. 結果を表示:日数、週数、月数、年数、時間、分、秒

計算ルール

  • タスクが排他的な区間を求めるのか、包含的にカウントするのかを確認してください。ビジネスルールでは開始日と終了日の両方を含めて数える場合が多いです。
  • タイムゾーンをまたぐ作業では、特に時間・分が重要な場合、まず両方の日付を同じタイムゾーンに変換してください。

利用シーン

2つの日付間の正確な日数を測定する開始日と終了日を選んで日数を計算します。週数・概算月数・概算年数・時間・分・秒の補助情報も表示されます。計算はグレゴリオ暦のルールに従うため、1900年は平年、2000年は閏年として処理され、2月29日に近い日付を扱う際に重要になります。
イベントや記録の経過時間を確認するサブスクリプションやサービス期間、旅行期間、プロジェクトタイムライン、記念日、学習ストリークなど、月をまたいで手動カウントするとミスが出やすい記録に活用できます。2つの元の日付を結果とともに残しておくと、後から区間を検証しやすくなります。「36ヶ月」と言うより生の開始日・終了日ペアの方が監査しやすいです。
概算の月数・年数は慎重に扱う主要な結果は日数です。月数と年数は概算のサマリーであるため、請求期間や法的年齢、契約ルールではそのコンテキストで求められる具体的なルールを使用してください。概算値は方向性の参考として使い、最終的なポリシー決定には用いないようにしましょう。
区間を示す前に包含的・排他的カウントを決めておく休暇範囲や試用期間では、開始日と終了日の両方を含めるかどうかを事前に合意し、結果を「AとBの間」または「AからBまで」としてラベル付けしてください。法務・人事・財務レポートが食い合わないようになります。単一の範囲では些細な1日のずれも、慣例が統一されていないと人事・給与・財務のエクスポート全体に波及します。
概算月数を具体的なカレンダーで照合する請求サイクルや試用期間、保証期間が月数や年数で定義されている場合、同じ日付ペアをカレンダー対応ルールで計算し、概算値がポリシーと一致するかを確認してください。同一レポート内で2つの単位を混在させることは契約紛争の一般的な原因であり、特に30日プランと暦月プランを併用しているB2B SaaSの更新では注意が必要です。「開始日から12ヶ月」という記念日条項は通常、365日ではなく正確に1暦年を意味するため、1月15日開始なら翌年の1月15日になります。

仕組み

正確な日数は 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 年以前の日付には先発グレゴリオ暦演算が使われ、当時実際に使われていた暦とは異なります。

計算はローカルで行われますか?

はい。両方の日付と結果はブラウザ内に留まります。アップロードもログ記録もされません。