1
1

More than 1 year has passed since last update.

AWS Lambda + Node.jsの実行環境でローカルタイムを扱いたいが、とりま日本時間JSTに甘んじる(JavaScript)

Last updated at Posted at 2022-09-19

やりたいこと

AWS Lambdaで時間を扱うのに、日本時間JSTが欲しい。(本当はローカルタイムが欲しい。)
だけど、Lambdaではローカルタイムという概念がないらしく、全てUTCになってしまう。
日本時間JSTが欲しいと思っていると、9時間ずれた値が返ってきたり、表示が19/9/2022となって欧米か!とツッコミたくなったり、してしまう。

ちなみに、なんでそんなことしたいかというとコレです↓ :frog:

実装!

色々調べたが簡単に済ませたかったので、とりま+9時間してJ、日本的なフォーマットに自力でした。

index.js
let dateTime = new Date();

// JSTにする
time.setHours(dateTime.getHours() + 9);

// 2022/9/19の形にする
const year = dateTime.getFullYear();
const month = dateTime.getMonth()+1;
const day = dateTime.getDate();
const targetDate = `${year}/${month}/${day}`

参考:https://www.sejuku.net/blog/22925

これでやりたいことはできましたが、なんかめんどくさい。
もっと簡潔にできないのかなーと思いつつ。

うまくいかなったもの

Lambda環境変数TZ

環境変数でTZをセットするといいよーという記事がたくさんありますが、予約語なので悪手らしい。実際に試してないので、動くのかもわからない。

定義されたランタイム環境変数
Lambda ランタイムは、初期化中にいくつかの環境変数を設定します。ほとんどの環境変数は、関数またはランタイムに関する情報を提供します。これらの環境変数のキーは予約済みであるため、関数設定では設定できません。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-envvars.html#configuration-envvars-runtime

というリストの中にTZ入っています。

toLocaleXXXString()系

Date.prototype.toLocaleDateString()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

Date.prototype.toLocaleTimeString()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString

Number.prototype.toLocaleString()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

// 引数でローカルを指定してもダメ
new Date().toLocaleDateString('jp-JP');

new Date().toLocaleString({ timeZone: 'Asia/Tokyo' });

最後に

これだとアプリが日本でしか使えないので、本当はローカルタイムを取れるようにして世界中で使えるようになりたい。
ま、そんなことは海外にdistributionするときに考えるか。

その他参考にしたもの。

1
1
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
1
1