目次
Google Apps Script で 営業日だけ処理をしたいということはないでしょうか。 営業日のみ朝のメール配信をしてほしい、そのほかにも、 週末だけ処理をしたいが金曜が祝日の場合はその前の日に処理をするなどがあります。 そういった祝日を考慮する場合の Script を考えました。
トリガを設定して平日にスクリプトが実行されるようにした上で、以下のコードを追加します。
祝日・休日を除いて処理をする
別の書き方をすれば、営業日のみ処理をする場合のことです。 Google Calendar を利用して 祝日を取得します。
処理の始めに次のコードを追加します。
1 2 3 4 5 6 7 8 9 |
var currentDate = new Date(); var weekday = currentDate.getDay(); if (weekday == 0 || weekday == 6) { return; } var calendar = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com'); if (calendar.getEventsForDay(currentDate, {max: 1}).length > 0) { return; } |
日曜と土曜の場合は処理を中断し、 Google が用意している日本の祝日カレンダーに祝日予定が入っている場合にも処理を中断します。 曜日の選択はトリガの設定でも可能です。
もちろんこれを boolean を返すメソッドにするのもいいと思います。
もし、会社で 創業記念日・設立記念日 なども休みになっている場合は、 会社の特別休日カレンダーを作成して 処理を追加します。 getCalendarById
の引数となるカレンダーIDは、 Google Calendar の該当のカレンダーについてカレンダー設定の画面を開くと確認できます。
週始めに処理をする場合
実行日が月-金曜の間で、同じ週内で当日よりも前に営業日がない場合に処理を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
var currentDate = new Date(); var weekday = currentDate.getDay(); if (weekday == 0 || weekday == 6) { return; } var calendar = CalendarApp.getCalendarById( 'ja.japanese#holiday@group.v.calendar.google.com'); if (calendar.getEventsForDay(currentDate, {max: 1}).length > 0) { return; } for (var i = weekday - 1; i > 0; --i) { var day = new Date(currentDate.getTime() - i * 1000 * 60 * 60 * 24); if (calendar.getEventsForDay(day, {max: 1}).length == 0) { return; } } |
ここまで長くなると、別のメソッドにしてしまった方が見通しがよくなります。
週末の営業日に処理をする場合
さっきとは逆のパターンです。 週末だと基本的には金曜日なのですが、金曜日が休みの場合は木曜日が週末の営業日になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
var currentDate = new Date(); var weekday = currentDate.getDay(); if (weekday == 0 || weekday == 6) { return; } var calendar = CalendarApp.getCalendarById( 'ja.japanese#holiday@group.v.calendar.google.com'); if (calendar.getEventsForDay(currentDate, {max: 1}).length > 0) { return; } for (var i = 5 - weekday; i > 0; --i) { var day = new Date(currentDate.getTime() + i * 1000 * 60 * 60 * 24); if (calendar.getEventsForDay(day, {max: 1}).length == 0) { return; } } |
Calendar から予定を取得するのに getEventsForDay
を使いましたが、 getEvents
を使うことで 1週間分の予定をまとめてとることができます。 そちらを使えば API の実行回数を減らすことができます。