日付計算とは?
日付計算とは、2つのカレンダー日付の差を求めるか、ある日付に期間を加減算するプロセスです。オンライン日付計算ツールを使えば、手動でカウントすることなく、任意の2日付間の正確な日数・週数・月数・年数を求められます。プロジェクト計画、契約法務、財務会計、ソフトウェア開発など、さまざまな場面で活用されています。
日付計算の複雑さは、グレゴリオ暦の不規則な構造に起因します。月の日数は28・29・30・31日と異なり、年の日数も閏年のルールによって365日か366日になります。日付番号を単純に引き算すると、異なる月や年にまたがる場合に誤った結果が生じます。適切な日付差分アルゴリズムは、カレンダーの各単位を個別に処理することでこれらの不規則性に対応する必要があります。
日付演算は多くのプログラミングの場面で登場します。トークンの有効期限の計算、定期イベントのスケジューリング、SLAデッドラインの算出、ログエントリ間の経過時間の測定などです。DevOpsのワークフローでは、証明書の有効期間、デプロイ凍結期間、オンコールローテーションの長さとして現れます。多くの言語では日付ライブラリが提供されていますが、ブラウザベースの計算ツールを使えば、コードを書いたり依存関係をインストールしたりREPLを開いたりすることなく、簡単な確認を即座に行えます。
この日付計算ツールを使う理由
任意の2日付間の時間を複数の単位で即座に表示します。数式も、コードも、サインアップも不要です。
日付計算ツールの使用例
日付期間の単位リファレンス
日付差分の計算にはさまざまな長さの単位が関係します。月と年は固定の期間ではないため、合計日数を単純に割り算すると不正確な結果になることがあります。以下の表に各単位とその範囲を示します。
| 単位 | 換算 | 備考 |
|---|---|---|
| 1 year | 365 or 366 days | Depends on leap year |
| 1 month | 28–31 days | Varies by month |
| 1 week | 7 days | Fixed |
| 1 day | 24 hours | Fixed (ignoring DST transitions) |
| 1 hour | 3,600 seconds | Fixed |
| 1 minute | 60 seconds | Fixed |
よく使われる日付フォーマット
日付をプログラムで扱う場合、フォーマットによって日付文字列のパース方法が決まります。誤ったフォーマットを使用すると、気づきにくいバグが発生します。ISO 8601はデータ交換において最も安全な選択肢です。曖昧さがなく、タイムゾーンに対応しているからです。以下の表に、よく使われるフォーマットを示します。
| フォーマット | 例 | 使用場面 |
|---|---|---|
| ISO 8601 | 2026-04-10T14:30:00Z | APIs, databases, logs |
| RFC 2822 | Fri, 10 Apr 2026 14:30:00 +0000 | Email headers, HTTP |
| Unix timestamp | 1775831400 | Epoch-based systems |
| US format | 04/10/2026 | User-facing (US locale) |
| European format | 10.04.2026 | User-facing (EU locale) |
| Short ISO | 2026-04-10 | HTML date inputs, SQL DATE |
コード例:2日付間の日数を計算する
JavaScript、Python、Go、およびコマンドラインで2日付間の差を計算する実用的なコード例です。各スニペットでは、合計日数の計算と、言語がサポートしている場合はカレンダー単位での内訳も示しています。
// 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 }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-15package 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
}# 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