calc / date
日時差分計算
2つの日時の差を日・時間・分・秒・年月日で計算します。デプロイ間隔や期間計算に便利です。入力内容はサーバーに送信されません。
差分
7日 0時間 0分 0秒
約 7日
概算約0年0ヶ月7日
総日数
7日
総時間数
168時間
総分数
10,080分
総秒数
604,800秒
使い方
01- 「開始日時」と「終了日時」に日時を入力してください
- 「今すぐ設定」ボタンで現在時刻を素早くセットできます
- 入力と同時にリアルタイムで差分が計算されます
- 結果は日・時間・分・秒の詳細表示と、総日数・総時間数などのまとめカードで確認できます
- 終了日時が開始日時より前の場合も差分は絶対値で計算されます
実装コード
02ブラウザ標準の Date オブジェクトのみで実装。外部ライブラリ不要でそのままコピーして利用できます。
export type DiffResult = {
totalMs: number
days: number
hours: number
minutes: number
seconds: number
totalDays: number
totalHours: number
totalMinutes: number
totalSeconds: number
approxYears: number
approxMonths: number
approxDaysRemainder: number
isPast: boolean
}
export function calcDiff(date1: string, date2: string): DiffResult | null {
const d1 = new Date(date1)
const d2 = new Date(date2)
if (isNaN(d1.getTime()) || isNaN(d2.getTime())) return null
const totalMs = Math.abs(d2.getTime() - d1.getTime())
const totalSeconds = Math.floor(totalMs / 1000)
const totalMinutes = Math.floor(totalMs / 60000)
const totalHours = Math.floor(totalMs / 3600000)
const totalDays = Math.floor(totalMs / 86400000)
const days = totalDays
const hours = Math.floor((totalMs % 86400000) / 3600000)
const minutes = Math.floor((totalMs % 3600000) / 60000)
const seconds = Math.floor((totalMs % 60000) / 1000)
const approxYears = Math.floor(totalDays / 365)
const approxMonths = Math.floor((totalDays % 365) / 30)
const approxDaysRemainder = totalDays % 30
return {
totalMs, days, hours, minutes, seconds,
totalDays, totalHours, totalMinutes, totalSeconds,
approxYears, approxMonths, approxDaysRemainder,
isPast: d1.getTime() > d2.getTime(),
}
}
export function formatDuration(result: DiffResult): string {
const parts: string[] = []
if (result.approxYears > 0) parts.push(`${result.approxYears}年`)
if (result.approxMonths > 0) parts.push(`${result.approxMonths}ヶ月`)
if (result.approxDaysRemainder > 0 || parts.length === 0)
parts.push(`${result.approxDaysRemainder}日`)
const timeParts: string[] = []
if (result.hours > 0) timeParts.push(`${result.hours}時間`)
if (result.minutes > 0) timeParts.push(`${result.minutes}分`)
if (timeParts.length > 0) parts.push(timeParts.join(''))
return parts.join('')
}よくある使用例・注意点
03プロジェクト期間の計算
プロジェクトの開始日と終了日を入力することで、正確な開発期間を日・時間単位で把握できます。スプリント期間(14日)やリリース間隔の確認にも便利です。デプロイタイムスタンプを2つ貼り付けるだけで差分が出ます。
年齢・経過年数の計算
生年月日と現在日時を入力すると「約X年Xヶ月X日」として概算の年齢が表示されます。ただし年月の概算は365日/12ヶ月を基準にしているため、うるう年や月ごとの日数差は考慮されていません。厳密な年齢計算が必要な場合は別途暦計算ロジックを実装してください。
うるう年・月またぎへの注意
このツールの「年月日概算」はあくまで参考値です。365日を1年、30日を1ヶ月として単純割り算しています。うるう年(366日)や月によって日数が異なる(28〜31日)ため、年月単位での厳密な差分が必要な場合は差異が生じます。正確な差分が必要な場合は「総日数」や「総時間数」を使ってください。
タイムゾーンについて
datetime-local 入力はブラウザのローカルタイムゾーンで値を扱います。そのため計算結果はあなたのブラウザのタイムゾーン設定に依存します。UTCや別タイムゾーンのタイムスタンプを比較する場合は、同一タイムゾーンに変換してから入力してください。タイムゾーン変換には「タイムゾーン変換」ツールを活用できます。
関連ツール
04ソースコード
05このツールのソースコード(テストコードを含む)はGitHubで公開しています。 MITライセンスで自由に利用・改変できます。
GitHub でコードを見る →