HOME / BLOG
BLOG

JavaScript Temporal APIの使い方【Dateでつらい日付処理を整理する】

デフォルト画像

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文字列などに統一する
  • ユーザー表示用のフォーマットと保存用の値を分ける
  • タイムゾーンが関係する処理はコメントや型で明示する
  • 月末やうるう年のテストを書く

あわせて読みたい

参考資料

まとめ

Temporalは、JavaScriptの日付処理をかなり読みやすくしてくれるAPIです。特に、日付だけ、時刻だけ、タイムゾーン込みの日時、期間を分けて扱えるのが大きいです。

ただし、今はブラウザ対応を確認しながら使う段階です。本番サイトではpolyfillや実行環境を見たうえで判断しつつ、まずは「Dateで曖昧にしていた値の意味を分ける」考え方だけでも取り入れると、日付まわりのバグは減らせます。