GoogleAppsScriptで日本の祝日を取得する

  • 29
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

日本の祝日のカレンダーを取得してきて。今日イベントがあるかを調べる感じ。

cal.getEventsのstartDateとendDateはどういう風に指定するとちゃんと想定通りのイベントが取れるのか不明。
startTimeが0時0分0秒の状態でendTimeを
8時59分59秒にすると1/1の祝日判定がfalse、9時0分0秒でもfalse、9時59分0秒にするとtrueになった。
(1/1は祝日なのでtrueが正しい)

とりあえず23時59分59秒で指定しておけば大丈夫なのでは無いだろうか(たぶん)

ちなみにholidaysはCalendarEvent型の配列、CalendarEventが持ってるメソッドとかは以下参照
https://developers.google.com/apps-script/reference/calendar/calendar-event?hl=ja

function main() {
  Logger.log(isJapaneseHoliday(2014, 1, 1));
  Logger.log(isJapaneseHoliday(2014, 2, 2));
  Logger.log(isJapaneseHoliday(2014, 3, 3));
  Logger.log(isJapaneseHoliday(2014, 4, 4));
  Logger.log(isJapaneseHoliday(2014, 5, 5));
  Logger.log(isJapaneseHoliday(2014, 6, 6));
  Logger.log(isJapaneseHoliday(2014, 7, 7));
  Logger.log(isJapaneseHoliday(2014, 8, 8));
  Logger.log(isJapaneseHoliday(2014, 9, 9));
  Logger.log(isJapaneseHoliday(2014, 10, 10));
  Logger.log(isJapaneseHoliday(2014, 11, 11));
  Logger.log(isJapaneseHoliday(2014, 12, 12));
}

/*
 * 今日が日本の祝日かどうか判定
 */
function isJapaneseHoliday(year, month, day) {
  var startDate = new Date();
  startDate.setFullYear(year, month-1, day);
  startDate.setHours(0, 0, 0, 0);

  var endDate = new Date();
  endDate.setFullYear(year, month-1, day);
  endDate.setHours(23, 59, 59, 999);

  var cal = CalendarApp.getCalendarById("ja.japanese#holiday@group.v.calendar.google.com");
  var holidays =  cal.getEvents(startDate, endDate);

  return holidays.length != 0;
}

mainを実行した結果ログ。
ちゃんと1/1と5/5だけtrueになっている。

[14-10-05 12:52:31:902 JST] true
[14-10-05 12:52:32:035 JST] false
[14-10-05 12:52:32:163 JST] false
[14-10-05 12:52:32:288 JST] false
[14-10-05 12:52:32:415 JST] true
[14-10-05 12:52:32:537 JST] false
[14-10-05 12:52:32:667 JST] false
[14-10-05 12:52:32:795 JST] false
[14-10-05 12:52:32:920 JST] false
[14-10-05 12:52:33:058 JST] false
[14-10-05 12:52:33:187 JST] false
[14-10-05 12:52:33:314 JST] false