JavaScriptで日時の差分を計算する方法|ミリ秒・日数の応用テクニック
先生と生徒の会話形式で理解しよう
生徒
「先生、JavaScriptで2つの日付の差を計算したいです。例えば、イベントまであと何日あるか知りたいときです。」
先生
「なるほど、それならDateオブジェクトを使って差分をミリ秒で計算し、必要に応じて日数や時間に変換すると便利です。」
生徒
「ミリ秒ってなんですか?」
先生
「ミリ秒は時間の単位で、1秒の1000分の1です。JavaScriptのDateは内部的に1970年1月1日からのミリ秒で日付を管理しています。」
1. 日付の差をミリ秒で計算する方法
まず、2つの日付オブジェクトを作成し、getTime()メソッドでミリ秒に変換します。
const startDate = new Date("2025-11-01");
const endDate = new Date("2025-11-18");
// 差分をミリ秒で取得
const diffMs = endDate.getTime() - startDate.getTime();
console.log("差分のミリ秒:", diffMs);
差分のミリ秒: 1476000000
このようにして、正確な時間単位の差分を計算できます。
2. ミリ秒を日数に変換する方法
1日 = 24時間 × 60分 × 60秒 × 1000ミリ秒 です。これを使ってミリ秒から日数を求めます。
const oneDay = 24 * 60 * 60 * 1000;
const diffDays = diffMs / oneDay;
console.log("差分の日数:", diffDays);
差分の日数: 17.0
整数で日数を知りたい場合は、Math.floor()やMath.round()を使います。
console.log("整数の日数:", Math.floor(diffDays));
整数の日数: 17
3. 時間や分単位での差分計算
必要に応じて、ミリ秒を時間や分、秒に変換することもできます。
// 時間単位
const diffHours = diffMs / (1000 * 60 * 60);
console.log("差分の時間:", diffHours);
// 分単位
const diffMinutes = diffMs / (1000 * 60);
console.log("差分の分:", diffMinutes);
差分の時間: 408.0
差分の分: 24480.0
4. 応用:締切までの残り日数を計算する
今日から特定の未来日付までの残り日数を自動で計算できます。
const today = new Date();
const deadline = new Date("2025-12-01");
// ミリ秒差分
const remainingMs = deadline.getTime() - today.getTime();
// 日数に変換
const remainingDays = Math.ceil(remainingMs / oneDay);
console.log("締切までの残り日数:", remainingDays);
締切までの残り日数: 13
このテクニックはカレンダーアプリやタスク管理で非常に便利です。
5. 過去の日付との差分を計算する
過去の日付に対しても同じように差分を計算できます。
const pastDate = new Date("2025-10-01");
const diffFromPast = today.getTime() - pastDate.getTime();
const daysFromPast = Math.floor(diffFromPast / oneDay);
console.log("過去からの日数:", daysFromPast);
過去からの日数: 48
これにより、過去のイベントからの日数経過も簡単に追跡できます。
6. 注意点:時間帯による誤差
日付の差を計算するときは、タイムゾーンや夏時間の影響で誤差が出る場合があります。日数だけを計算したい場合は、時間部分を揃えてから計算すると安心です。
// 時間を0:00に揃える
const start = new Date("2025-11-01T00:00:00");
const end = new Date("2025-11-18T00:00:00");
const diffDaysSafe = Math.floor((end.getTime() - start.getTime()) / oneDay);
console.log("安全に計算した日数:", diffDaysSafe);
安全に計算した日数: 17
こうすることで、日付差分計算の精度を保てます。