Playground

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