はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【GAS】Google App Scriptで日付・時間(Date)を扱うときの罠

はじめに

JavaScriptTypeScriptで現在の時間を取得するにはDateを用いると思います。

function getDate(){
  var date = new Date();
  Logger.log(date.toString());
  Logger.log(date.toLocaleString("ja"));
}

これの出力を見てみると、

f:id:hanaaaaaachiru:20191109190036p:plain

おかしい、なにかがおかしい…。

Gooogle Apps Scriptはグーグルのサーバーで実行されるので、toString()で日本時間が返ってこないことはなんとく分かっていました。

ただ日本を対象として取得しても、toStringと同じ時間が返ってきているのです。

解決策

途方に暮れていたところ、このようなサイトを見つけました。

https://nju33.com/note/post?note=javascript&post=%E6%97%A5%E6%9C%AC%E6%99%82%E9%96%93%E3%82%92%E5%8F%96%E5%BE%97

こちらによると協定世界時からの差分を取得し、先程の例で取得した時間からその分だけずらしてしまおうということでした。

いやはや、なるほどですね。

それを加味したコードはこちら。

function getDate2(){
  var date = new Date(Date.now() + ((new Date().getTimezoneOffset() + (9 * 60)) * 60 * 1000));
  Logger.log(date.toString());
}

f:id:hanaaaaaachiru:20191109190856p:plain

(EST)という邪魔なやつはいまだに残っていますが、時間は正しく表示することができました。