概要
こちらは日本時間でのみ運用したい場合や、タイムゾーン固定したい時の覚書となっています
dayjsを何気なく何も考えずに使っていると、環境によって時間がずれる!という問題が発生しました。
ローカル環境とデプロイ環境(Cloud Run)でタイムゾーンが違うことが原因だったので、これを機に、dayjsのタイムゾーンの動きをまとめたいと思います。
※dayjsはシステムのタイムゾーンを使っています。
タイムゾーンとは
各地域で時差があるので、これをUTCを基準として表現するということです。
日本だと+9時間、ニューヨークだと-5時間といった形です。
どのように設定するか
Day.jsの公式サイトを見てみるとtzでデフォルトのタイムゾーンが設定できます。
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.tz.setDefault("America/New_York")
// The same behavior with dayjs.tz("2014-06-01 12:00", "America/New_York")
dayjs.tz("2014-06-01 12:00") // 2014-06-01T12:00:00-04:00
// use another timezone
dayjs.tz("2014-06-01 12:00", "Asia/Tokyo") // 2014-06-01T12:00:00+09:00
// reset timezone
dayjs.tz.setDefault()
ここでとっても重要なのが、dayjs.tz
を使うということです。
// dayjs.tz.setDefaultで設定したタイムゾーンが適用される!!
dayjs.tz("2014-06-01 12:00")
// タイムゾーン指定すると、指定したタイムゾーンが適用される!
dayjs.tz("2014-06-01 12:00", "Asia/Tokyo")
tzにタイムゾーンを指定すると一時的に上書きして表示できます。
結論
dayjs()
ではなく、dayjs.tz()
を必ず使いましょう!
But dayjs(dateValue) always uses the local timezone, even if dayjs.tz.setDefault is used; only dayjs.tz(dateValue) (without second parameter) uses the default timezone.
ただし、dayjs.tz.setDefaultを使用している場合でも、dayjs(dateValue)を使うと、常にローカルタイムゾーンを使用します。dayjs.tz(dateValue)(2 番目のパラメータなし) のみデフォルトのタイムゾーンをが適用されます。
ドキュメントに書いてありました