🎂

Date.toISOString()について

2023/12/24に公開

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