JavaScript で実行環境に左右されず常に JST 日本時間を取得する

JavaScript の new Date() は、実行環境のタイムゾーンの影響を受けてしまう。Date#toLocaleString() という関数で Asia/Tokyo を指定できれば良いのだが、日本のタイムゾーン定義がないマシンではやはり動かない。

コレを何とかするには、Date#getTimezoneOffset() という関数を利用する。コレはその Date オブジェクトが UTC からどのくらいズレているのかを分単位で返す関数。UTC で動作する環境で実行すれば 0 が返ってくるし、JST で動作する環境なら -540 と返ってくる。

ということは、コレを利用して次のようなイディオムを組んでやれば、実行環境のタイムゾーンに左右されず、必ず日本時間が取得できる。

// 取得できる値は必ず日本時間になる
const jstNow = new Date(Date.now() + ((new Date().getTimezoneOffset() + (9 * 60)) * 60 * 1000));

実際に計算してみよう。

コレで OK。あとはこのオブジェクトから getHours() などと日時情報を取り出してやれば、必ず JST で日付を扱える。