🕙

【Google Apps Script】スプレッドシートから取得した日付を日本時間にする

2021/12/19に公開

はじまり

今回、ぶち当たった課題が、GASでスプレッドシートから読み取った日付が何だかズレている。というものです。
具体的には、上のスプレッドシートの「2021-12-18」は、GASでnew Date()で取得した日付を入れたのですが、その日付をGASで読み取ると「2021-12-17」的な感じにズレていました。

マニフェストファイルの修正

設定用jsonファイルの表示

GASのエディタ画面で歯車マークをクリックすると、「appsscript.json」マニフェスト ファイルをエディタで表示するのチェックボックスがあるのでチェックを入れます。
すると、「appscript.json」のファイルを編集できるようになります。

appscript.json(修正前)

{
  "timeZone": "America/New_York",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}

appscript.json(修正後)

{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}

修正後の表示

マニフェストファイルを修正した後は、下の画像のように読み取った日付が「2021-12-18」的な感じになりました。

原因を考える

スプレッドシートの設定では、事象が起きた時もちゃんと日本時間に設定されていました。

いや、むしろスプレッドシートの時間が日本時間に設定されていたからこそ、GASの時間がニューヨーク時間になるように時差を埋め合わせてくれたのかもしれませんね。

そもそも、修正前のnew Date()の時間もよく見たら、2021-12-19の日にちで実行したのに、2021-12-18になってたし。

おしまい

日付の部分は、一般的なDBのサーバ時間と同様に、GASとスプレッドシートでもタイムゾーンを気を付けなければならなかったのでした。

Discussion