確認のやり方については @atm-snag さんが書かれている通りのことを試してみるのが良いと思います。まあ以下に書く通り実際にはPCのタイムゾーンに依存するのですが、手を動かしてみるのは大切です。
そして Date()
は色々なフォーマットの文字列を解釈してしまうのですが、
日付を表す文字列値で、 Date.parse() メソッドによって認識される形式で指定されます。 (これらの形式は IETF 準拠の RFC 2822 タイムスタンプであり、 ISO8601 のバージョンの文字列でもあります。)
注: Date コンストラクター (および同じように動作する Date.parse()) を使用した日付文字列の解析は、ブラウザーによって違いや矛盾があるため、使用を避けることを強くお勧めします。。
RFC 2822 書式の文字列の対応は慣習的に行われているだけです。
このように記載されている通り、ISO 8601形式を使うのが安全です。ポイントは3つ。
- 日付は
2021-01-08
のようにハイフンで区切る - 時刻も指定する場合、
T
で区切る - タイムゾーンを末尾に指定できる
タイムゾーンというのはUTCから何時間ズレているかを示す値です。UTCはまあだいたいグリニッジ標準時だと思ってください。日本は9時間進んでいます。
というわけで、 Date()
に渡す日時のパターンとしては次の3つがあります。(本当は中途半端に年・月だけを与えたりもできるのですが省略します)
new Date("2021-01-08") // 日付だけ
→UTCで2021/1/8 0:00:00(日本時間で朝9時)を意味します。時差によるズレはありません。世界中で同一のある瞬間を示します。
new Date("2021-01-08T00:00") // タイムゾーンを省略
→現地時刻で2021/1/8 0:00:00を意味します。環境によって指し示す時刻が変わります。「Webサイトを閲覧している人にとっての真夜中」ということになります。
new Date("2021-01-08T00:00+09:00") // タイムゾーンを指定
→日本時間(UTC+9時間)で2021/1/8 0:00:00を意味します。時差によるズレはありません。世界中で同一のある瞬間を示します。
【ソース】https://262.ecma-international.org/11.0/#sec-date.parse