ToolDeck

日付計算ツール

2つの日付の差を年・月・日などで計算

日付計算とは?

日付計算とは、2つのカレンダー日付の差を求めるか、ある日付に期間を加減算するプロセスです。オンライン日付計算ツールを使えば、手動でカウントすることなく、任意の2日付間の正確な日数・週数・月数・年数を求められます。プロジェクト計画、契約法務、財務会計、ソフトウェア開発など、さまざまな場面で活用されています。

日付計算の複雑さは、グレゴリオ暦の不規則な構造に起因します。月の日数は28・29・30・31日と異なり、年の日数も閏年のルールによって365日か366日になります。日付番号を単純に引き算すると、異なる月や年にまたがる場合に誤った結果が生じます。適切な日付差分アルゴリズムは、カレンダーの各単位を個別に処理することでこれらの不規則性に対応する必要があります。

日付演算は多くのプログラミングの場面で登場します。トークンの有効期限の計算、定期イベントのスケジューリング、SLAデッドラインの算出、ログエントリ間の経過時間の測定などです。DevOpsのワークフローでは、証明書の有効期間、デプロイ凍結期間、オンコールローテーションの長さとして現れます。多くの言語では日付ライブラリが提供されていますが、ブラウザベースの計算ツールを使えば、コードを書いたり依存関係をインストールしたりREPLを開いたりすることなく、簡単な確認を即座に行えます。

この日付計算ツールを使う理由

任意の2日付間の時間を複数の単位で即座に表示します。数式も、コードも、サインアップも不要です。

即時結果
2つの日付を選択するだけで、年・月・週・日・時間・分の差が表示されます。どちらの日付を変更しても結果はリアルタイムで更新されます。
🔒
プライバシー優先
すべての計算はブラウザ内で実行されます。日付データはサーバーに送信されず、保存やログ記録も一切行われません。
📅
複数の出力単位
合計日数・週数・月数、さらに年月日の内訳まで、すべての単位を同時に確認できます。単位間の変換を自分で行う必要はありません。
🔢
アカウント不要
すぐに使い始められます。ログイン、サブスクリプション、使用制限は一切ありません。ブックマークして、日付確認が必要なときにいつでも使えます。

日付計算ツールの使用例

フロントエンド開発
機能リリース日までの残り日数の確認、カウントダウンタイマーのロジックの検証、または期待される間隔に対する日付ピッカーコンポーネントのテストに使用できます。
バックエンドエンジニアリング
トークンの有効期限ウィンドウの検証、キャッシュTTL期間の計算、またはスケジュールされたジョブの間隔が正しい次回実行日を生成することの確認に使用できます。
DevOps・SRE
ポストモーテムでインシデントタイムスタンプ間の差の測定、証明書の有効期限リードタイムの計算、または休日期間中のデプロイ凍結期間の算出に使用できます。
QA・テスト
特定の日付オフセットを持つテストデータの生成、生年月日から正確な年齢を計算することによる年齢確認ロジックの検証、または日付の境界条件が正しく処理されることの確認に使用できます。
プロジェクト管理
スプリント期間の計算、マイルストーン間の稼働日数の測定、または開始日からカレンダー日数を数えることによる納品スケジュールの見積もりに使用できます。
学習・学業
試験までの日数のカウント、学期の長さの計算、またはコンピュータサイエンスの授業での日付演算の宿題の答え合わせに使用できます。

日付期間の単位リファレンス

日付差分の計算にはさまざまな長さの単位が関係します。月と年は固定の期間ではないため、合計日数を単純に割り算すると不正確な結果になることがあります。以下の表に各単位とその範囲を示します。

単位換算備考
1 year365 or 366 daysDepends on leap year
1 month28–31 daysVaries by month
1 week7 daysFixed
1 day24 hoursFixed (ignoring DST transitions)
1 hour3,600 secondsFixed
1 minute60 secondsFixed

よく使われる日付フォーマット

日付をプログラムで扱う場合、フォーマットによって日付文字列のパース方法が決まります。誤ったフォーマットを使用すると、気づきにくいバグが発生します。ISO 8601はデータ交換において最も安全な選択肢です。曖昧さがなく、タイムゾーンに対応しているからです。以下の表に、よく使われるフォーマットを示します。

フォーマット使用場面
ISO 86012026-04-10T14:30:00ZAPIs, databases, logs
RFC 2822Fri, 10 Apr 2026 14:30:00 +0000Email headers, HTTP
Unix timestamp1775831400Epoch-based systems
US format04/10/2026User-facing (US locale)
European format10.04.2026User-facing (EU locale)
Short ISO2026-04-10HTML date inputs, SQL DATE

コード例:2日付間の日数を計算する

JavaScript、Python、Go、およびコマンドラインで2日付間の差を計算する実用的なコード例です。各スニペットでは、合計日数の計算と、言語がサポートしている場合はカレンダー単位での内訳も示しています。

JavaScript
// Calculate days between two dates
const start = new Date('2026-01-15')
const end = new Date('2026-04-10')
const diffMs = end.getTime() - start.getTime()
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24))
console.log(diffDays) // → 85

// Get year, month, day breakdown
function dateDiff(a, b) {
  let years = b.getFullYear() - a.getFullYear()
  let months = b.getMonth() - a.getMonth()
  let days = b.getDate() - a.getDate()
  if (days < 0) {
    months--
    days += new Date(b.getFullYear(), b.getMonth(), 0).getDate()
  }
  if (months < 0) { years--; months += 12 }
  return { years, months, days }
}
console.log(dateDiff(start, end)) // → { years: 0, months: 2, days: 26 }
Python
from datetime import date, timedelta
from dateutil.relativedelta import relativedelta

start = date(2026, 1, 15)
end = date(2026, 4, 10)

# Total days
diff = (end - start).days
print(diff)  # → 85

# Year/month/day breakdown (requires python-dateutil)
rd = relativedelta(end, start)
print(f"{rd.years}y {rd.months}m {rd.days}d")  # → 0y 2m 26d

# Add 90 days to a date
future = start + timedelta(days=90)
print(future)  # → 2026-04-15
Go
package main

import (
	"fmt"
	"time"
)

func main() {
	start := time.Date(2026, 1, 15, 0, 0, 0, 0, time.UTC)
	end := time.Date(2026, 4, 10, 0, 0, 0, 0, time.UTC)

	// Total duration
	diff := end.Sub(start)
	days := int(diff.Hours() / 24)
	fmt.Println(days) // → 85

	// Add 90 days
	future := start.AddDate(0, 0, 90)
	fmt.Println(future.Format("2006-01-02")) // → 2026-04-15
}
CLI (GNU date / macOS)
# Days between two dates (GNU coreutils)
echo $(( ($(date -d "2026-04-10" +%s) - $(date -d "2026-01-15" +%s)) / 86400 ))
# → 85

# Add 90 days to a date (GNU date)
date -d "2026-01-15 + 90 days" +%Y-%m-%d
# → 2026-04-15

# macOS (BSD date) — add 90 days
date -j -v+90d -f "%Y-%m-%d" "2026-01-15" +%Y-%m-%d
# → 2026-04-15

よくある質問

2つの日付の間の日数を計算するにはどうすればよいですか?
後の日付から前の日付を引いて、ミリ秒単位(または使用する言語のネイティブな期間型)の差を求め、1日のミリ秒数(86,400,000)で割ります。これで経過日数の合計が得られます。年・月・残り日数のカレンダー単位での内訳が必要な場合は、月の長さが可変であるため、各単位を個別に処理する必要があります。
日付差分には開始日と終了日のどちらが含まれますか?
慣例として、日付差分は開始日または終了日のいずれかを除外して、2つの日付の間の日数を数えます。1月1日と1月2日を選択した場合、結果は1日になります。両端を含む数え方(両方の日付を含める)が必要な場合は、結果に1を加えてください。このツールは、多くのプログラミング言語で使われる終端除外の慣例に従っています。
日付計算で閏年はどのように処理されますか?
閏年は2月29日が追加され、年の日数が365日ではなく366日になります。グレゴリオ暦の閏年のルールは「4で割り切れる年が閏年、ただし100の倍数は閏年でない、さらに400の倍数は閏年」です。したがって2024年と2028年は閏年ですが、1900年は閏年ではなく、2000年は閏年でした。カレンダー単位(年・月・日)で計算する日付差分アルゴリズムはこれを自動的に処理します。合計日数に変換するアルゴリズムは、範囲が2月29日をまたぐ場合に追加の1日を考慮する必要があります。
カレンダー日数と営業日数の違いは何ですか?
カレンダー日数は週末や祝日を含むすべての日を数えます。営業日数(稼働日数とも呼ばれます)は土曜日・日曜日・祝祭日を除外します。このツールはカレンダー日数を計算します。おおよその営業日数に変換するには、カレンダー日数の合計に5/7を掛けてください。正確な営業日数を求めるには、対象地域の祝日カレンダーも必要です。
開始日に日数を加算して将来の日付を計算できますか?
はい、できます。JavaScriptではDateオブジェクトを作成して`setDate(getDate() + n)`を呼び出します。Pythonではdateオブジェクトに`timedelta(days=n)`を加算します。Goでは`time.AddDate(0, 0, n)`を使用します。このツールは既知の2日付間の差の計算に特化していますが、演算結果の確認にも使えます。開始日と期待される結果の日付を入力して、合計日数の出力が追加したオフセットと一致することを確認してください。
なぜツールによって月数の計算結果が異なるのですか?
月の計算は、月によって日数が異なるため曖昧です。たとえば1月31日から2月28日の場合、1ヶ月として扱うのか、0ヶ月と28日として扱うのかが問題になります。ライブラリによって異なる選択をしています。最も一般的な慣例(Pythonのdateutil、JavaのPeriod、このツールが採用)は、同じ日付または短い月の最終有効日に達した場合を1ヶ月と数えます。結果を比較する際は、使用しているライブラリがどの慣例を採用しているか必ず確認してください。
日付計算はタイムゾーンの影響を受けますか?
時刻を含まない日付(年・月・日のみ)を選択した場合、計算は瞬間ではなくカレンダー日付に対して行われるため、タイムゾーンに依存しません。特定の時刻とタイムゾーンを含む2つの瞬間の差を計算する必要がある場合は、完全なISO 8601タイムスタンプを使用し、引き算の前に両方をUTCに変換する必要があります。このツールはカレンダー日付のみを対象としています。