🎂
Date.toISOString()について
Date.toISOString()を使用したところ、想定している日付の1日前になってしまったので挙動を調べました。
Date.toISOString()
Date.toISOString()は日付と時刻をISO8601形式の文字列に変換し返します。
ISO8601形式は国際的に認められた日付と時刻の表現方法で、
この形式はYYYY-MM-DDTHH:mm:ss.sssZとなります。
(例:"2023-12-24T02:00:00.000Z)
Zは協定世界時(UTC)を表す記号で、常に 0 UTC オフセットとなります。
(参照:mdn web docs)
実行例
console.log(new Date('2023-12-24T02:00:00+09:00').toISOString());
UTC+9 時間(日本標準時)で表されている日時について、Date.toISOString()を実行すると、
> "2023-12-23T17:00:00.000Z"
このように、UTC(協定世界時)で返されるため12月24日2時の9時間前の12月23日17時が返されます。
注意点
上記のように、toISOString() は UTC(協定世界時) での日時を返すため、ローカルタイムゾーンでの日付や時刻を扱う場合には注意が必要となります。日本時間で午前2時のデータを扱っている場合、toISOString() を使うと、前日の日付になってしまいます(日本は UTC+9 時間)。
おわりに
これまでUTCなどタイムゾーンの扱いをなあなあにしてしまっていましたが、調べてみて挙動がよくわかりました。
間違い等ありましたらご指摘頂けますと幸いです。
Discussion