概要
ども!久しぶりにGoogle Apps Script(GAS)でプログラムを書いている龍ちゃんです。さくっとかけてGoogleのサービスと連携できるのが利点ですね。今回は、プログラムの実行日時が土日祝日か判定する必要が出てきたので執筆です。
今回の内容です。
- 土日の判定をDate型を活用して判定
- Google Calendarを活用して祝日を判定
- 実行日から一番近い平日を取得
それぞれ関数化して共有していきます。
土日の判定をDate型を活用して判定
const isWeekend = (date) => {
const day = date.getDay()
if (day === 0 || day === 6) {
return true;
}
return false;
}
こちらは、Date型の曜日情報を取得して判定しています。日曜日を0として曜日情報がカウントされています。0が日曜日、6が土曜日になります。
Google Calendarを活用して祝日を判定
const holidayCalendarId = 'ja.japanese#holiday@group.v.calendar.google.com';
const calendar = CalendarApp.getCalendarById(holidayCalendarId);
const isHoliday = (date) => {
const otherHoliday = [
[2, 3], // 節分
[3, 3], // ひな祭り
[5, 12], // 母の日
[7, 7], // 七夕
[12, 25] // クリスマス
]
// monthIndex 0~11のため+1
const month = date.getMonth() + 1
// 日付はそのまま取得でOK
const day = date.getDate()
const isOtherHoliday = otherHoliday.some((event) => {
return event[0] == month && event[1] == day
})
if (isOtherHoliday) return false
const events = calendar.getEventsForDay(date);
return events.length > 0;
}
Google Calendarの「日本の祝日」から情報を取得して、活用しています。ただ、「日本の祝日」カレンダーの欠点で、「日本で休みじゃない祝日」も登録されています。そのため、人力でその判定を行っています。処理としては、以下の二点です。
- 祝日として登録されているが休みではない日の判定
- Google Calendar経由で祝日の判定
Google Calendarの操作はこちらでまとめています。
実行日から一番近い平日を取得する
const getWeekdays = () => {
const targetDate = new Date()
while (isWeekend(targetDate) || isHoliday(targetDate)){
targetDate.setDate(targetDate.getDate() + 1)
}
return targetDate
}
こちらは、先ほど作成したisWeekend
/isHoliday
を使用して、実行した日が土日祝であれば一番近い平日を取得しています。
終わり
ども!今回はGASで土日祝を判定するプログラムの紹介を行いました。トリガーと組み合わせて、「毎週月曜日に定期実行を設定して、月曜日が祝日だった場合は近い平日に処理を振り返る」みたいな処理も可能です。
ほなまた~