JavaScript Date プレイグラウンド

JavaScript の Date 式を入力し、あらゆる出力形式とプロパティをリアルタイムで探索します — toISOString・toString・getTime・getFullYear など。

JavaScript の Date オブジェクト

JavaScript 組み込みの Date オブジェクトは、時刻を内部的に Unix エポック(1970 年 1 月 1 日 00:00:00 UTC)からのミリ秒数として保持します。どの Date インスタンスも結局はこの 1 つの整数です。toISOString()・toString()・toLocaleString() などのメソッドは、同じ値を異なる形で表示する手段にすぎません。

JavaScript の日付でよくある落とし穴

Date のいくつかの挙動は、経験者でもつまずかせます:

  • 月は 0 始まり:1 月は 0、12 月は 11。表示時は必ず 1 を足す
  • new Date('2024-01-01') は UTC 深夜として解釈され、new Date('2024/01/01') はローカル深夜として解釈される
  • new Date(2024, 0, 1) はローカル時刻で 2024 年 1 月 1 日を作る(月は 0 始まり)
  • Date.now() はミリ秒を返す。Math.floor(Date.now() / 1000) で Unix 秒になる
  • 86400000 ms を足して日付を進めるのは避ける。サマータイムで時刻がずれることがある

JavaScript でタイムゾーンを扱う

JavaScript の Date オブジェクトにタイムゾーンのプロパティはなく、常に UTC で保持されます。タイムゾーン変換は表示時に Intl.DateTimeFormat API で行います。

  • new Intl.DateTimeFormat('en-US', { timeZone: 'Asia/Tokyo', dateStyle: 'full', timeStyle: 'long' }).format(date)
  • date.toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })
  • new Intl.DateTimeFormat('en-CA', { timeZone: tz }).formatToParts(date) — カスタム整形用に個々のパーツを返す

Playground の出力の読み方

Playground は同じ Date 値を複数のビューで表示し、単位やタイムゾーンの誤りをすばやく見つけられます。まず getTime と Unix 秒を比べ、次に ISO とローカル文字列を確認します。ISO の日付が正しくローカル文字列だけ違って見える場合、タイムスタンプは正しく、表示タイムゾーンが変わっただけです。

  • getTime は常に Unix エポックからのミリ秒
  • Unix 秒は getTime を 1000 で割って切り捨てた値
  • toISOString は常に末尾 Z 付きの UTC を表示する
  • toString と toLocaleString は、オプションで上書きしない限りブラウザのローカルタイムゾーンで表示する