GAS: Calendar APIで今日のスケジュールを取得できない

Google App Script (GAS) では、Calender API を使って簡単に自分の予定を取得できます。指定した1日分の予定を取得する getEventsForDay 関数なんてのまで用意されています。getEventsForDay は日付を引数にとって、その日にかかる予定のリストを返します。

events = CalendarApp.getEventsForDay(new Date());

こんな感じで「今日」を “new Date()” で指定すれば、今日の予定を取得できるはず…と思いきや、失敗。デバッグで確認すると、リストが空だったり、昨日の予定が入っていたり。

よくよく調べてみると new Date() が日本時間ではなく、ニューヨーク時間での現在日時を返していたことがわかりました。

let now = new Date();
now = new Date(now.getTime() + ((9 * 60 + now.getTimezoneOffset()) * 60 * 1000));
events = CalendarApp.getEventsForDay(now);

という感じで無理やり時差を+9時間(日本)にしてやったら、とりあえず今日の予定を取得することができました。

とはいえこの方法はエレガントではない…

そもそも new Date() に影響を与えているタイムゾーンが悪いので、タイムゾーンをちゃんと日本に合わせてやればこんな回りくどいことしなくても大丈夫です。タイムゾーンを変更するには GAS プロジェクトの appsscript.json ファイルを修正します。詳しい修正方法については、こちらの記事を読んでみてください。