2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

概要

こちらは日本時間でのみ運用したい場合や、タイムゾーン固定したい時の覚書となっています

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 番目のパラメータなし) のみデフォルトのタイムゾーンをが適用されます。

ドキュメントに書いてありました:relaxed:

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?