日数計算(2つの日付の差・◯日後・営業日数)

開始日と終了日から日数・週数・年月日の差を計算。基準日から±N日/週/月後の日付と曜日も算出でき、土日と手入力した祝日を除いた期間内の平日数も表示します。日付はUTC基準で扱い、うるう年や夏時間のずれも正しく処理します。

日数
-
週数(あまり)
-
年・月・日の内訳(暦どおり)
-
開始日の曜日
-
終了日の曜日
-
平日数(開始日・終了日を含む期間、土日と祝日欄を除く)
-
土日日数
-
期間内の祝日日数(除外分)
-

日本の祝日は法改正や年によって変わります。正確な日付は内閣府「国民の祝日について」の一覧で確認し、上の欄に貼り付けてください(このツールは祝日を自動取得しません)。


計算結果の日付
-
曜日
-

月単位の加減で、加算先の月に同じ日付が存在しない場合(例:1/31の1か月後)は、その月の末日に自動調整します。日付計算はすべてUTC基準で行うため、タイムゾーンや夏時間による1日のずれは発生しません。

使い方

  1. 「開始日」「終了日」を選ぶと、日数・週数・年月日の内訳・各日の曜日が即座に表示される。締切までの残り日数や在籍期間の計算などに。
  2. 契約日数のように開始日も1日目として数えたい場合は「初日を含めて数える」をオンにする(オフだと純粋な引き算の日数になる)。
  3. 土日と、任意で入力した祝日を除いた「平日数」も同じ期間で自動計算される。祝日は1行に1日、YYYY-MM-DD 形式で入力する。
  4. 下段では「基準日」から指定した日数・週・月だけ前後した日付と曜日を計算できる(納期や期限の算出に)。

仕組み・根拠

日付の計算は Date.UTC() で生成したUTC基準の日時だけを使い、ローカルタイムゾーンの Date コンストラクタや setDate は使っていません。ブラウザのローカルタイムゾーンで日付を扱うと、夏時間(サマータイム)を採用する地域では1日の長さが23時間や25時間になる日があり、単純な +1日 の演算がずれることがあります。UTCには夏時間が存在しないため、この問題を避けられます。うるう年の判定もJavaScriptの Date オブジェクトの仕様(ECMA-262のグレゴリオ暦計算)に従い、2月の日数は自動的に28日・29日が正しく切り替わります。年・月・日の内訳は、後ろの日付から前の日付を順に引き、繰り下がりが起きたらその月の末日を足し戻す方式(満年齢の計算と同じ考え方)で求めています。

現場の落とし穴:「月」を単位にした日付の加減算は、末日をまたぐと結果が直感と食い違うことがあります。例えば1月31日の1か月後は、2月には31日が存在しないため2月28日(うるう年なら29日)に自動調整されます。逆に「1月末日 + 1か月 + 1か月」のように連続で加算すると、途中でクランプされた日付を起点にするため、単純な2か月後の日付(3月31日)にはならず3月28日になる、という食い違いが起きがちです。月次バッチの実行日をずらす際は、この丸めの挙動を必ず確認してください。

よくある質問

Q. 「初日を含める」は年月日の内訳にも反映されますか?

A. いいえ。年月日の内訳(暦どおりの差)は常に2つの日付そのものの差で、「初日を含める」の設定は日数・週数の合計値にのみ影響します。

Q. 祝日はこのツールが自動で判定してくれますか?

A. していません。日本の祝日は法改正や年によって日付が変わるため、内閣府が公表する「国民の祝日について」の一覧を確認し、対象年の祝日をご自身で入力してください。

Q. 終了日を開始日より前にするとどうなりますか?

A. エラーにはせず、符号を無視した日数(絶対値)で計算し、その旨を注記表示します。

関連ツール

最終更新・根拠の確認日: 2026-09-10 · カテゴリ: 日付・時間