ToolActToolAct

日付加減算ツール

指定日から日数、週数、月数、年数を加減

日付に日数を加減

日付加減算ツールとは?

日付加減算ツールは、開始日を基準にして日、週、月、年を足したり引いたりし、目的の日付を求めるための計算ツールです。契約更新、フォローアップ、保証期限、リマインダー、プロジェクトの予定日などを手でカレンダーを数えずに確認できます。難しいのは単純な日数ではなく、実際の暦の境界です。月の日数は一定ではなく、うるう年で 2 月の日数が変わり、1 月 31 日の 1 か月後がそのまま存在しない場合もあります。このツールは自然なカレンダー上の結果を素早く出しますが、営業日、祝日、振替日、法的な期限規則は別途確認が必要です。

使い方

使い方

  1. 開始日を入力してください
  2. 加算(未来方向)または減算(過去方向)を選択してください
  3. 値を入力し、単位(日/週/月/年)を選択してください
  4. 「計算」をクリックすると、対象の日付が表示されます

日付の計算ルール

  • 月や年の計算では短い月にあたる場合があります。1月31日に1ヶ月を足すなど、ビジネスルールで日付をどう扱うかを確認してください。
  • 締め切りの場合は、週末や祝日、終日のカットオフを最終日に含めるかどうかを確認してください。

利用シーン

既知の開始日から締め切りを計算する開始日を選び、加算または減算を選んで日・週・月・年を適用すると、保証期限や更新日、フォローアップ、納品見積もり向けの結果日付が得られます。月末の繰り上がりはブラウザの日付ユーティリティが処理するため、1月31日に1ヶ月を足すと2月28日または29日になるなどのエッジケースもサーバー側のカレンダー検索なしで解決されます。
クイックオフセットでよく使う計画期間を比較する結果が表示された後、+7日・+30日・+90日や+1ヶ月・+3ヶ月・+1年のショートカットで、よく使うレビュー期間を素早く比較できます。開始日と選択したオフセットはページ内にのみ留まり、バックエンドへのリクエストは送信されないため、記念日や試用期間、ビザ申請、医療フォローアップの日付を共有端末や借用端末でも安全に計算できます。
暦の計算と営業日ルールは別物だと理解するこのツールは日付ユーティリティを通じたカレンダー日付と月・年の繰り上がりを扱います。祝日や週末、会社のカレンダー、管轄固有の締め切りルールは考慮されません。開始日・オフセット・結果日付を一緒に記録しておくと、後から計算内容を理解しやすくなります。
1月31日に1ヶ月を足すなど月末の繰り上がりを再確認する開始日が対象月の日数を超えている場合、計算機が繰り上がりをどう処理するかを確認し、サブスクリプション更新や契約記念日が意図せず別の日付にずれないようにしましょう。1月31日に1ヶ月を足した場合の2月の実際の日数や、3月31日に1ヶ月を引いた場合の閏年2月の日数など、エッジケースを請求や人事システムに反映する前にテストしてください。
分散チーム向けにタイムゾーンを組み合わせて記録する参照日付を明示的なタイムゾーンやUTCオフセットとともに記録してください。コンテキストなしで保存された締め切りは、他の地域のレビュアーが再解釈した際に1日ずれる可能性があります。例えば「2026-07-15」という契約終了日は東京とロサンゼリスのチームでは異なる瞬間を意味するため、オフセットを日付とともに記録することで、地域間引き継ぎでよくある静かな日付ずれを防げます。

仕組み

このツールの日付計算は、ECMAScript の Date オブジェクトが実装する先延ばしグレゴリオ暦に基づいています。JavaScript では月が 0 始まり(1 月が 0、12 月が 11)であるため、日付コードではインデックスのずれによるバグが最も多く発生します。日数の加算は new Date(d.getTime() + n * 86_400_000) と単純ですが、月の加算は難しくなります。月ごとの日数が 28、29、30、31 日と異なるため、date.setMonth(date.getMonth() + n) という標準的な書き方では、結果の月が元の日より短い場合にオーバーフローが発生します。例えば 1 月 31 日に 1 ヶ月を足すと 2 月 28 日ではなく 3 月 3 日になります(余分な 3 日が 3 月に繰り上がる)。このツールは setMonth 実行後に getMonth を比較してオーバーフローを検出し、必要に応じて対象月の最終日に丸める動作により、moment.js や date-fns、Temporal の PlainDate.add() と同じ結果を返します。 うるう年はグレゴリオ暦の標準ルールに従います。4 で割り切れる年はうるう年ですが、世紀の年は 400 で割り切れる必要があります。1900 年と 2100 年は平年、2000 年は閏年、2024 年も閏年です。2 月 29 日を跨ぐ計算では特に重要です。2023 年で 1 月 29 日に 1 ヶ月を 2 回足すと 3 月 29 日になりますが、2024 年では 2 月 29 日(有効な日付)を経由して 3 月 29 日になり、丸めは不要です。ユリウ暦からグレゴリオ暦への移行の 1582 年という境界は、先延ばしグレゴリオ暦ではルールが過去に無限に拡張されるため無視されます。1582 年 10 月 15 日以前の日付は技術的に時代錯誤ですが、現代の目的では正しく計算されます。 タイムゾーン処理は別の次元の問題です。Date は内部的に UTC の瞬間を保存し、ホストシステムの IANA タイムゾーン(例: America/New_York、Asia/Shanghai)は getDate()、getMonth()、toLocaleString() の呼び出し時にのみ適用されます。2 つの落とし穴があります。(1) Z サフィックスなしの ISO 文字列(「2026-06-10」)は UTC の午前 0 時として解釈されますが、Z のない「2026-06-10T00:00:00」はローカル時刻の午前 0 時として解釈され、同じ getDate() でもユーザのオフセットにより 9 日または 10 日を返す可能性があります。(2) 春の DST 切り替え(02:00~03:00 をスキップ)と秋の DST 切り替え(01:00~02:00 を繰り返し)により一部の計算が曖昧になり、「+24 時間」の加算が壁時計上で 23 時間または 25 時間先になることがあります。営業日や平日のみの計算、祝日を考慮した計算には、このカレンダー結果を地域固有の祝日リスト(例: date-holidays npm パッケージや独自カレンダー)で後処理する必要があります。

  • JS の Date は月が 0 始まり: 1 月 = 0、12 月 = 11。インデックスのずれが最も一般的なミス。
  • setMonth のオーバーフロー: 1 月 31 日 + 1 ヶ月 = 3 月 3 日(2 月 28 日ではない)。setMonth 後の getMonth 比較で月末に丸める。
  • うるう年: 4 で割り切れるが、世紀の年は 400 で割り切れる必要がある(1900 = 平年、2000 = 閏年、2024 = 閏年)。
  • Z なし ISO 8601(「2026-06-10T00:00:00」)はローカル時刻として解釈。Z 付きは UTC で getDate() が異なる日を返す可能性。
  • DST 切り替えにより 23 時間と 25 時間の日が発生。+24 時間の加算が必ずしも暦日 +1 とはならない。
  • 日単位の計算は getTime() + n * 86_400_000 で正確。より長い単位は setMonth / setFullYear を経由し、丸め処理を伴う。
  • 営業日や祝日対応の計算は、地域固有のカレンダーテーブルを上に重ねる必要がある。エンジン自体には含まれない。

使用例

開始日に 90 日を加算(トライアル / OKR レビュー)

開始日     : 2026-01-15(木曜日)
操作       : + 90 日
結果       : 2026-04-15(水曜日)
用途       : 90 日間のトライアル終了日、Q1 OKR レビュー

本日から 6 ヶ月を減算

開始日     : 2026-06-11
操作       : - 6 ヶ月
結果       : 2025-12-11
用途       : 更新や離脱分析のための 6 ヶ月前の日付参照

2 年 3 ヶ月 5 日を加算(ビザ有効期限)

開始日     : 2026-01-15
ステップ 1 : + 2 年    -> 2028-01-15
ステップ 2 : + 3 ヶ月  -> 2028-04-15
ステップ 3 : + 5 日    -> 2028-04-20
結果       : 2028-04-20

月末の繰り上げ: 1月31日 + 1 ヶ月

開始日     : 2026-01-31
操作       : + 1 ヶ月
結果       : 2026-02-28(2026 年の 2 月は 28 日まで)

うるう年の確認:
開始日     : 2028-01-31
操作       : + 1 ヶ月
結果       : 2028-02-29(2028 年はうるう年)

請求リマインダーのために 14 日を減算

サブスク更新日       : 2026-07-01
操作                 : - 14 日
リマインダー送信日   : 2026-06-17

よくある質問

月末の日付に対して「月数を加算」する処理はどう動作しますか?

月によって日数が異なるため、1 月 31 日に 1 か月を加算する操作は曖昧になります。この計算機は標準的な慣例に従い、対象月の月末にクランプします。1 月 31 日 + 1 か月 = 2 月 28 日(うるう年なら 29 日)です。これは Excel の EDATE 関数と同じ挙動です。

週末や祝日も日数に含まれますか?

デフォルトでは含まれます。「5 日加算」は暦日 5 日分を加算します。営業日の計算(週末や任意で祝日を除外)が必要な場合は、専用の「営業日計算ツール」をご利用ください。このページは純粋な暦日計算のためのものです。

年・月・週・日を同時に加算できますか?

はい。結果は年 → 月 → 週 → 日の順で適用されます。これは JavaScript の Temporal 提案を含む、ほとんどの日付ライブラリで採用されている慣例です。この順序は重要で、1 月 1 日に「1 か月と 30 日」を加算した場合と「30 日と 1 か月」を加算した場合では結果が異なります。

夏時間(DST)はどう処理されますか?

計算は絶対時刻ではなく暦日を基準に行うため、DST 切り替えをまたいで「1 日」を加算しても、ローカルタイムでの時刻は同じままです。24 時間単位での厳密な計算が必要な場合は、単位を日数ではなく時間に切り替えてください。

対応している日付の範囲はどのくらいですか?

JavaScript の Date オブジェクトは 1970 年から ±100,000,000 日の範囲をカバーしており、おおよそ西暦 -271,821 年から 275,760 年に相当します。この範囲内であれば、過去・未来のどの日付でも処理可能です。グレゴリオ暦改革(1582 年)以前の日付については、各地の暦と異なる点にご注意ください。

2 つの日付を引き算するのと、負の日数を加算するのは何が違いますか?

違いはありません。N 日を減算することは、-N 日を加算することと同じです。2 つの日付の間隔を求めたい場合は、「日付差分」ツールをご利用ください。このページは「開始日に期間を加減算する」一方向の計算専用です。

入力したデータはサーバーに送信されますか?

いいえ。計算はすべてブラウザ内で実行されます。ページを更新すると入力内容はクリアされます。