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 は、オプションで上書きしない限りブラウザのローカルタイムゾーンで表示する