日付加減算ツール
指定日から日数、週数、月数、年数を加減
日付に日数を加減
日付加減算ツールとは?
日付加減算ツールは、開始日を基準にして日、週、月、年を足したり引いたりし、目的の日付を求めるための計算ツールです。契約更新、フォローアップ、保証期限、リマインダー、プロジェクトの予定日などを手でカレンダーを数えずに確認できます。難しいのは単純な日数ではなく、実際の暦の境界です。月の日数は一定ではなく、うるう年で 2 月の日数が変わり、1 月 31 日の 1 か月後がそのまま存在しない場合もあります。このツールは自然なカレンダー上の結果を素早く出しますが、営業日、祝日、振替日、法的な期限規則は別途確認が必要です。
使い方
使い方
- 開始日を入力してください
- 加算(未来方向)または減算(過去方向)を選択してください
- 値を入力し、単位(日/週/月/年)を選択してください
- 「計算」をクリックすると、対象の日付が表示されます
日付の計算ルール
- 月や年の計算では短い月にあたる場合があります。1月31日に1ヶ月を足すなど、ビジネスルールで日付をどう扱うかを確認してください。
- 締め切りの場合は、週末や祝日、終日のカットオフを最終日に含めるかどうかを確認してください。
利用シーン
仕組み
このツールの日付計算は、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 つの日付の間隔を求めたい場合は、「日付差分」ツールをご利用ください。このページは「開始日に期間を加減算する」一方向の計算専用です。
入力したデータはサーバーに送信されますか?
いいえ。計算はすべてブラウザ内で実行されます。ページを更新すると入力内容はクリアされます。