JavaScript Date プレイグラウンド
JavaScript の Date 式を入力し、あらゆる出力形式とプロパティをリアルタイムで探索します — toISOString・toString・getTime・getFullYear など。
JavaScript Expression
Type any expression that returns a Date or number.
JavaScriptのDateオブジェクト
JavaScriptに組み込まれたDateオブジェクトは、時刻を内部的にUnixエポック(1970年1月1日 00:00:00 UTC)からのミリ秒数として保存します。すべてのDateインスタンスは、結局のところこの単一の整数にすぎません。toISOString()、toString()、toLocaleString() などのさまざまなメソッドは、同じ基礎値を表示する異なる方法です。
JavaScriptの日付を扱う際のよくある落とし穴
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秒が得られる
- 86400000ms を足して日を加算するのは避ける — DSTのせいで誤った時刻に着地することがある
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) — カスタム整形のために個々の部品を返す
プレイグラウンドの出力の読み方
プレイグラウンドは同じDate値を複数のビューで表示するので、単位やタイムゾーンの誤りをすばやく見つけられます。まず getTime をUnix秒と比べ、次にISO文字列とローカル文字列を確認します。ISO日付は正しいのにローカル文字列が違って見える場合、タイムスタンプは正しく、表示タイムゾーンだけが変わっています。
- getTime は常にUnixエポックからのミリ秒
- Unix秒は getTime を1000で割って切り捨てた値
- toISOString は常に末尾にZを付けてUTCを表示する
- toString と toLocaleString は、オプションで上書きしない限りブラウザのローカルタイムゾーンで表示する