JavaScriptの日付処理は、ずっとDateで何とかしてきました。ただ、日付だけを扱いたいのに時刻が混ざったり、タイムゾーンで1日ずれたり、月の足し算で変な結果になったりします。
そこで出てきたのがTemporalです。MDNでもDateの置き換えを目指したAPIとして説明されています。ただし、現時点ではまだすべての主要ブラウザで安心してそのまま使える状態ではありません。だからこの記事では「今すぐ本番で雑に使う」ではなく、「何が変わるのかを先に理解しておく」目的で整理します。
Temporalで何が楽になるのか
PlainDateで日付だけを扱えるPlainTimeで時刻だけを扱えるZonedDateTimeでタイムゾーン込みの日付時刻を扱えるDurationで期間を明示できる- Dateよりも「これは何を表している値か」が読みやすい
DateとTemporalの違い
// Dateだと「日付だけ」を扱いたい時にも時刻やタイムゾーンが混ざりやすい
const date = new Date('2026-08-14');
console.log(date.toISOString());
// Temporalなら「日付だけ」をPlainDateとして扱える
const practiceDay = Temporal.PlainDate.from('2026-08-14');
const nextWeek = practiceDay.add({ days: 7 });
console.log(nextWeek.toString()); // 2026-08-21
Dateは便利ですが、常に時刻とタイムゾーンの話がついてきます。誕生日、公開日、練習日、締切日のように「日付だけ」でいいものには、Temporal.PlainDateの方が意味が近いです。
練習記録や予約で使いやすい形
バスケの練習記録アプリや予約フォームを作るなら、「日付」「開始時刻」「長さ」を分けて持てるのはかなり自然です。
const day = Temporal.PlainDate.from('2026-08-14');
const start = Temporal.PlainTime.from('19:30');
const duration = Temporal.Duration.from({ minutes: 90 });
const startDateTime = day.toPlainDateTime(start);
const endDateTime = startDateTime.add(duration);
console.log(`${startDateTime.toString()} - ${endDateTime.toString()}`);
// 2026-08-14T19:30:00 - 2026-08-14T21:00:00
この形だと、UIから受け取った値とデータの意味が近くなります。2026-08-14は日付、19:30は時刻、90分は期間です。コードを読んだ時に、値の役割が見えます。
タイムゾーンを明示する
遠征、オンラインイベント、海外サービスとの連携では、タイムゾーンを曖昧にすると事故ります。Temporal.ZonedDateTimeを使うと、どのタイムゾーンの時刻なのかを値に含められます。
const tokyoGame = Temporal.ZonedDateTime.from({
timeZone: 'Asia/Tokyo',
year: 2026,
month: 8,
day: 14,
hour: 19,
minute: 5,
});
const utc = tokyoGame.withTimeZone('UTC');
console.log(tokyoGame.toString());
console.log(utc.toString());
今の採用判断
| 用途 | 判断 |
|---|---|
| 学習・検証 | 今から触っておく価値あり |
| Node.jsだけで動く内部ツール | 環境を固定できるなら検討しやすい |
| 一般公開のWebサイト | ブラウザ対応とpolyfillを確認してから |
| 日付が重要な予約・決済・大会運営 | 仕様理解は必須。採用は慎重に |
Dateを使い続ける場合でも意識したいこと
- 日付だけの値と日時の値を混ぜない
- 保存形式をISO文字列などに統一する
- ユーザー表示用のフォーマットと保存用の値を分ける
- タイムゾーンが関係する処理はコメントや型で明示する
- 月末やうるう年のテストを書く
あわせて読みたい
- JavaScriptで検索条件をURLに保存する方法
- JavaScriptのfetchにタイムアウトを付ける方法
- JavaScriptで作るよく見るUI 10選
- FlutterでAPI通信をRepositoryに分ける方法
参考資料
まとめ
Temporalは、JavaScriptの日付処理をかなり読みやすくしてくれるAPIです。特に、日付だけ、時刻だけ、タイムゾーン込みの日時、期間を分けて扱えるのが大きいです。
ただし、今はブラウザ対応を確認しながら使う段階です。本番サイトではpolyfillや実行環境を見たうえで判断しつつ、まずは「Dateで曖昧にしていた値の意味を分ける」考え方だけでも取り入れると、日付まわりのバグは減らせます。