lambdaのタイムゾーンの設定であれやこれやとやったのでメモ。
lambdaのタイムゾーンは悩みどころの一つです。環境変数の TZ にタイムゾーンを指定することで固定することができるのですが、これは非推奨のやり方です。
Lambda のタイムゾーンを環境変数TZで指定してはいけないっていう話
なので、JavaScriptで日本時間に合わせてやる必要があります。ライブラリを使っても実装できますが、使わなくても簡単に実装できます。
タイムゾーンはUTCが基本ですので、実行環境に左右されずに日本時間を取得することが理想です。
なるほどなぁと思ったのがこちらのブログ。
JavaScript で実行環境に左右されず常に JST 日本時間を取得する
JavaScript の new Date() は、実行環境のタイムゾーンの影響を受けてしまう。Date#toLocaleString() という関数で Asia/Tokyo を指定できれば良いのだが、日本のタイムゾーン定義がないマシンではやはり動かない。
|
|
これなら日本のタイムゾーン定義がないlambdaでもイケる。
最初はこれでもいいかぁと思って実装しようとしましたが、返り値が2022-09-13T11:50:14.999Z
なのでいちいちフォーマットを揃える必要がある。日付の加算減算がなければこれでもたいして面倒ではないですが、ある場合はちょっと面倒。
そこで使ったのが、Intl.DateTimeFormat。
Intl.DateTimeFormat
を使えば言語に応じた日付のフォーマットが可能です。
timeZone
をAsia/Tokyo
にすれば日本時間に直してくれます。
|
|
加算減算をやる場合は、こんな感じで関数を用意してやると便利ですね。減算の場合は+
を-
にするだけ。
|
|
以上です。最初はライブラリを使って実装してました。案外ライブラリなしでも簡単に実装できるものですね。