NodejsのDate関数が9時間ずれてしまうGMT対応

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

朝起きたときに、本来起きなければ行けない時刻を過ぎていると、一気に目が冷めますよね。
 

どんなに寝起きが悪い人でも、寝起き時に寝坊と気がついた時の目の覚め様は、歌舞伎の早変わりのような素早さがあります。
 

これを回避しようと、事前に時計を10分ぐらい進めている人いますが、日々生活の中で時計が10分進んでいるから・・・と頭のなかで計算するクセが付いてしまい、朝起きてもまだ10分大丈夫というような怠け癖が付いてしまうのだそうです。
 

時計は正確にセットしておくことが重要なんですね。
 

そして、今回NodeJSを使ってとあるシステムを構築している時に、指定時刻の30分前の間を有効にするバッチ処理をプログラミングした時に、GMT設定がうまくいかず、強制的に行なう対応をしたので、ソースを載せておきます。

どんな不具合?

日付指定してある文字列を取得して、30分前、過ぎているという判別を行い、30分前の間だけを判定する時に、時刻の指定(判別)が正常に行えない。
※9時間ずれる。
 

この時点で、インフラ管理を行っている人であれば、ピンとくると思いますが、サーバーのtimezone設定が日本時刻になっていないことが原因なんですね。
 

でも、サーバー管理者でなければ、Timezoneの設定を変更することが出来ない場合、GMT+9の設定のみ有効なソースコード対応と、サーバー側の設定対応の2つを行っておきます。

サーバー設定変更

サーバー設定が変更できる人は、この処理だけで問題解決します。
 

まず、下記のページを参照して、localeの設定を行います。
 

UbuntuのCUIで日本語ファイルを使う方法 | Tips of rubbish

次に、下記コマンドで作業完了です。
 

 

ソースコードで対応

このプログラムはかなり力技で行なうやり方なので、利用する場合は、自己責任としてお使いください。
 

 

Timezone設定が正常にできていない環境で、このソースコードを実行すると、下記のようになります。
 

明らかに9時間分足りていないので、下記ソースコードに変更してみます。
 

 

結果は以下の通りです。
 

 

Timezonehはズレているんですが、強制的に9時間分の数値を追加して対応しています。
 

この時点での問題点は、正常なTimezoneの環境にもっていくと、逆に9時間ずれてしまいます。
なので、ピンポイントの環境であればいいのですが、汎用性の高いプログラムを構築しようとすると、タイムゾーンの判定をして、対応しなければいけません。
ていうか、やっぱり、サーバーのTimezone設定を正常にする事をオススメします。
 

大したソースコードではないのですが、そもそもわからない人の参考になればと思い記事にしておきました。
 

サーバーも寝起き用の目覚まし時計も正確にセットしましょうね。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です