見出し画像

Googleカレンダーの「祝日」と「祝日およびその他の休日」をGASで取得するとどうなるのか?

いつの間にか仕様が変わったようで、Googleカレンダーの祝日カレンダーのデフォルト設定で「祝日およびその他の休日」を表示する設定になっています。

この設定では、祝日のほかクリスマスなどの国民の休日以外の祭日も含まれて表示されてしまいます。

Googleカレンダーの公式ドキュメントには以下のような記載があります。

1 パソコンで Google カレンダーを開きます。
2 右上の設定アイコン 次の操作 [設定] をクリックします。
3 左側のパネルで、[カレンダーを追加] 次の操作 [関心のあるカレンダーを探す] をクリックします。
4 [地域限定の休日] で、登録している祝日カレンダーの一覧を確認します。
5 目的の祝日カレンダーの横にあるプルダウンをクリックします。
6 [祝日のみ] をクリックします。

カレンダーで祝日を追加または削除する

じゃあGASでカレンダーを取得した場合にどうなるんだろう?と思い検証を行いました。

カレンダーIDの違い

実際にカレンダー上で「祝日」と「祝日およびその他の休日」を切り替えてみるとカレンダーIDがそれぞれ別に設定されていることがわかりました。

祝日のみ
ja.japanese.official#holiday@group.v.calendar.google.com

祝日およびその他の休日」
ja.japanese#holiday@group.v.calendar.google.com

同時表示不可

カレンダーIDが異なるので両方同時に表示できるのか?とも思いましたが、どちらか一方のみ表示が可能なようです。

祝日のみにしても銀行休業日は表示される

続いて、登録されている祝日を実際に取得してみることにすると、銀行休業日というのがどちらも登録されていることがわかりました。

銀行休業日は、銀行法および銀行法施行令によって定められており、以下のとおりです。
① 日曜日
② 「国民の祝日に関する法律」に規定する休日
③ 12月31日から翌年の1月3日
④ 土曜日

〔その他〕銀行休業日とはどういう意味ですか?

登録されているのは③だけなのですが、祝日かというと微妙なところ・・・。まぁほとんどの会社がお休みなのでほとんど影響がないといえばなさそうですが。

ディスクリプションの違い

祭日と祝日ではここが異なります。
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('-----------------------------');
  });
}

いいなと思ったら応援しよう!