🗓️
dayjs の デフォルトタイムゾーンが効いてない?って思ったときに確認すること
はじめに
UTC
で保存されている日時を日本時間で表示したいときに、毎回タイムゾーン指定したくないので、初期処理でdayjs.tz.setDefault("Asia/Tokyo")
ってすると思うんですが、それが効くときと効かないときがあるよという話です。
結論
UTC
をAsia/Tokyo
にしたいのであれば、
dayjs("2023-01-23 00:00:00")
とせずに、
dayjs("2023-01-23T00:00:00Z")
もしくは、
dayjs("2023-01-23T00:00:00+00:00")
とすると、
2023-01-23 09:00:00
になります。
タイムゾーンがUTC
であることを明示しないと、そもそもタイムゾーン変換しようがないよということなんでしょう。
試したこと
import dayjs from 'dayjs'
import 'dayjs/locale/ja'
import utc from 'dayjs/plugin/utc'
import timezone from 'dayjs/plugin/timezone'
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.tz.setDefault("Asia/Tokyo")
dayjs.locale('ja')
// "2023-01-23 00:00:00 => 2023-01-23 00:00:00"
console.log("2023-01-23 00:00:00 => " + dayjs("2023-01-23 00:00:00").format('YYYY-MM-DD HH:mm:ss'))
// "2023-01-23T00:00:00Z => 2023-01-23 09:00:00"
console.log("2023-01-23T00:00:00Z => " + dayjs("2023-01-23T00:00:00Z").format('YYYY-MM-DD HH:mm:ss'))
// "2023-01-23T00:00:00+09:00 => 2023-01-23 00:00:00"
console.log("2023-01-23T00:00:00+09:00 => " + dayjs("2023-01-23T00:00:00+09:00").format('YYYY-MM-DD HH:mm:ss'))
// "2023-01-23T00:00:00+00:00 => 2023-01-23 09:00:00"
console.log("2023-01-23T00:00:00+00:00 => " + dayjs("2023-01-23T00:00:00+00:00").format('YYYY-MM-DD HH:mm:ss'))
詳しくは、以下を参照ください。
おわりに
意外にこの挙動について説明してくれている記事が見つからなかったんで書いてみました。
誰かのお役に立てますように。
ではでは。
Discussion