Googleカレンダーの「祝日」と「祝日およびその他の休日」をGASで取得するとどうなるのか?
いつの間にか仕様が変わったようで、Googleカレンダーの祝日カレンダーのデフォルト設定で「祝日およびその他の休日」を表示する設定になっています。
この設定では、祝日のほかクリスマスなどの国民の休日以外の祭日も含まれて表示されてしまいます。
Googleカレンダーの公式ドキュメントには以下のような記載があります。
じゃあGASでカレンダーを取得した場合にどうなるんだろう?と思い検証を行いました。
カレンダーIDの違い
実際にカレンダー上で「祝日」と「祝日およびその他の休日」を切り替えてみるとカレンダーIDがそれぞれ別に設定されていることがわかりました。
祝日のみ
ja.japanese.official#holiday@group.v.calendar.google.com
祝日およびその他の休日」
ja.japanese#holiday@group.v.calendar.google.com
同時表示不可
カレンダーIDが異なるので両方同時に表示できるのか?とも思いましたが、どちらか一方のみ表示が可能なようです。
祝日のみにしても銀行休業日は表示される
続いて、登録されている祝日を実際に取得してみることにすると、銀行休業日というのがどちらも登録されていることがわかりました。
登録されているのは③だけなのですが、祝日かというと微妙なところ・・・。まぁほとんどの会社がお休みなのでほとんど影響がないといえばなさそうですが。
ディスクリプションの違い
祭日と祝日ではここが異なります。
GASで判定する必要があるならここを参照して判定するのが良さそうです。
祝日のみのディスクリプション
祝日
祝日およびその他の休日」のディスクリプション
祭日
祭日を非表示にするには、Google カレンダーの [設定] > [日本の祝日] に移動してください
参考:検証用に使用したGAS
※カレンダーIDは実行しているアカウントが参照しているIDしか使えません
function logJapaneseHolidays() {
// カレンダーIDを指定
const calendarId = 'ja.japanese#holiday@group.v.calendar.google.com';
//const calendarId = 'ja.japanese.official#holiday@group.v.calendar.google.com';
// 今日の日付を取得
const today = new Date();
// 1年間の日付範囲を指定
const startDate = new Date(today.getFullYear(), 0, 1); // 1月1日
const endDate = new Date(today.getFullYear(), 11, 31); // 12月31日
// カレンダーイベントを取得
const events = CalendarApp.getCalendarById(calendarId).getEvents(startDate, endDate);
// 祝日をログに出力
events.forEach(function(event) {
const title = event.getTitle(); // タイトル
const startTime = event.getStartTime(); // 開始時間
const description = event.getDescription(); // ディスクリプション
const location = event.getLocation(); // ロケーション
// ログに出力
Logger.log(`タイトル: ${title}`);
Logger.log(`開始時間: ${startTime}`);
if (description) {
Logger.log(`説明: ${description}`);
}
if (location) {
Logger.log(`場所: ${location}`);
}
Logger.log('-----------------------------');
});
}