Translate

2021年1月7日

Google Apps Script タイムゾーンの設定

ゾウでもわかる Google Apps Script

GAS(Google Apps Script)で文字型の日付時間をDate型にしてGoogleスプレッドシートにあるタイムスタンプと比較しようとしたら、なぜか一致してくれない、、、。

「何で?」と日時を格納した変数をログに出力してみると、

function myFunction() {
  d = new Date(`2020/01/01 10:10:10`)
  console.log(d)
}
Wed Jan 01 2020 10:10:10 GMT-0500 (Eastern Standard Time)

と表示されます。

GASがアメリカ東部標準時で表示

GMT-0500 (Eastern Standard Time) とは、 アメリカ東部標準時です。

シートの日時は日本時間(JST)で設定されていたので、同じ時間でもアメリカ東部標準とは14時間の時差があるので一致しないわけです。


Apps ScriptエディタでTimeZoneを設定する

GASでのTimeZone(タイムゾーン)を変更しようと思い、新しいApps Scriptエディタの「プロジェクトの設定」を見ましたが、タイムゾーンという設定項目がありません。

「appsscript.json」マニフェスト ファイルをエディタで表示する という項目には、チャックが入っていなかったので、確認のためにチェックを入れてみました。

新エディタでタイムゾーンの設定

エディタに戻ると、appsscript.jsonが表示されました。コードを見ると、timeZone(タイムゾーン)が "America/New_York" となっていました。

appsscript.json の内容

下記が、appsscript.json のソースになります。

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

この timeZoneの値を、"Asia/Tokyo" に変更して保存。

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

もう一度、下記のコードを実行すると、

function myFunction() {
  d = new Date(`2020/01/01 10:10:10`)
  console.log(d)
}
Wed Jan 01 2020 10:10:10 GMT+0900 (Japan Standard Time)

GMT+0900 (Japan Standard Time) 日本標準時に変わりました。

タイムゾーンを変更したら、プロジェクトの設定の『「appsscript.json」マニフェスト ファイルをエディタで表示する』のチェックを外すとエディタに表示されなくなります。


旧エディタなら簡単にタイムゾーンの変更が可能

新エディタにしていたので設定項目がありませんでしたが、旧エディタならタイムゾーンの変更がUIでできることが後からわかりました。

① ファイル→プロジェクトのプロパティを選択

旧エディタでのタイムゾーンの設定

② タイムゾーンを(GMT+09:00)東京 に変更して保存

プロジェクト プロパティ

こちらの方が簡単でしたね。


日時の比較

ちなみにDate型の変数は、そのまま等符号では比較できません。

function myFunction() {
  var d1 = new Date('2021/01/01 10:00:00')
  var d2 = new Date('2021/01/01 10:00:00')
  if  (d1 == d2)  {
    console.log('d1=',d1)
    console.log('d2=',d2)
    console.log('一致')
  } else  {
    console.log('d1=',d1)
    console.log('d2=',d2)
    console.log('不一致')
  }
}

これを実行すると

d1= Fri Jan 01 2021 10:00:00 GMT+0900 (Japan Standard Time)
d2= Fri Jan 01 2021 10:00:00 GMT+0900 (Japan Standard Time)
不一致

と、同じ日時を代入した変数なのに一致しません。

日時の比較は、getTIme()でミリ秒に変換して比較するのが一番簡単な方法です。

function myFunction() {
  var d1 = new Date('2021/01/01 10:00:00')
  var d2 = new Date('2021/01/01 10:00:00')
  if  (d1.getTime() == d2.getTime())  {
    console.log('d1 msec=',d1.getTime())
    console.log('d2 msec=',d2.getTime())
    console.log('一致')
  } else  {
    console.log('d1 msec=',d1.getTime())
    console.log('d2 msec=',d2.getTime())
    console.log('不一致')
  }
}

d1に代入した日時をmsec(ミリ秒)で表示させると一致していることがわかります。

d1 msec= 1609462800000
d2 msec= 1609462800000
一致

GASの基礎を学べる参考図書

ある程度プログラミンがわかっていれば、WEBやYoutubeでも十分に調べられると思いますが、初歩的なところからであれば参考図書は有効な学習手段です。

詳解! Google Apps Script完全入門 [第3版]」は、プラグラミング初心者にわかりやすく説明されています。GASを最初に学ぶ一冊として良書です。

Udemy オススメ講座

【新IDE対応】Google Apps Script(GAS)の基礎を完全習得

【新IDE対応】Google Apps Script(GAS)の基礎を完全習得

講師:事務職たらこ

印象に残りやすい手書き風スライドを用いGASの基本的なプログラミングを気軽に学ぶことができる。本講座でGASを活用した自動化ができるレベルにはなれないが、基礎としては十分。

0 件のコメント:

コメントを投稿

象と散歩:アクセス上位(過去30日間)

象と散歩:アーカイブ

象と散歩:ラベル

Alexa (31) blogger tips (19) CDプレーヤー (2) Echo (26) excel (5) FireTV (2) GAS (13) Google Colaboratory (1) Google Docs (1) Google Forms (3) Google Sheets (8) hacks (17) internet (42) iPhone (2) iPhone/iPad (35) kindle (7) Mac (1) markdown (5) Piano (1) PowerPoint (1) Python (4) Sheets (1) sns (9) typora (5) used (2) WG-N10/WG-N20 (3) Windows10 (3) Windows8/RT (4) Withings (9) アウトドア (5) アクアリウム (10) アップライトベース (10) イソギンチャク (6) インク (2) ウォーキングベース (10) エギング (37) エコ (6) エシカル (5) カクレクマノミ (6) ガジェット (78) キャンプ (6) コロコロ (6) サステナブル (4) ジャーナリング (4) スカルプケア (5) スマートスピーカー (25) スマートホーム (11) スローライフ (1) その他 (5) ダイエット (12) つけペン (4) データマイニング (37) テキストマイニング (9) テレワーク (20) トラベルギア (12) トレッキング (2) ノート (2) バスタイム (3) フローリングワイパー (1) ホウキ (7) ポモドーロタイマー (3) ポモドーロテクニック (3) ホワイトボード (3) マーケティング (58) マインドマップ (14) 英語学習 (5) 楽器 (13) 楽譜 (2) 禁煙 (4) 筋活 (2) 菌活 (7) 健康 (63) 行書 (2) 座敷箒 (4) 三線 (3) 車中泊 (4) 修理 (1) 書く瞑想 (4) 睡眠 (11) 生き物 (6) 節電 (4) 掃除用具 (9) 調理器具 (14) 天体観測 (2) 美文字 (6) 筆記具 (25) 文房具 (29) 防災 (7) 万年筆 (21) 無印良品 (1) 料理 (9) 棕櫚箒 (3)