【GAS】土日・祝日を判定する、祝日の日付一覧を取得する方法
追記(2024年11月)
2024年9月頃からGoogleカレンダーの仕様に変更があり、祝日に加えてその他の行事(節分、雛祭り、母の日、七夕、七五三、クリスマス)が表示されるようになっています。この問題の解決方法は以下の記事をご参考ください。
土曜日・日曜日を判定する
この関数isWeekend()
は、特定の日付targetDate
が土曜日か日曜日かを判定します。
function isWeekend(targetDate) {
const day = targetDate.getDay(); // 0 (日曜日) ~ 6 (土曜日)
if (day === 0 || day === 6) {
return true;
}
return false;
}
// 使用例:今日の日付が土日か判定する
function main() {
const targetDate = new Date(); // 現在の日時
// 文字列で日付の指定ができる
// const targetDate = new Date("2023/07/15");
console.log("日付: " + Utilities.formatDate(targetDate, "JST", "yyyy/MM/dd"));
if (isWeekend(targetDate)) {
console.log("土曜日・日曜日です。");
} else {
console.log("平日(月~金)です。");
}
}
DateオブジェクトのgetDayメソッドは、日曜日を0として月曜日から土曜日までを1から6の数字で返します。そのためこの関数は、指定された日付が土曜日(6)または日曜日(0)である場合にtrueを返し、それ以外の場合はfalseを返します。
祝日の一覧を取得する
祝日の一覧を取得するのにGoogleカレンダーを使用します。ja.japanese.official#holiday@group.v.calendar.google.com
は、Googleカレンダーの日本の祝日カレンダーのIDを表します。
// 祝日を取得する関数を定義
function getHolidays() {
// 2023年の開始日と終了日を設定
const startDate = new Date("2023/01/01");
const endDate = new Date("2023/12/31");
// 日本の祝日カレンダーのIDを定義
const holidayCalendarId = 'ja.japanese.official#holiday@group.v.calendar.google.com';
// カレンダーIDを使用してカレンダーを取得
const calendar = CalendarApp.getCalendarById(holidayCalendarId);
// 2023年の間で定義したカレンダー上の全イベント(祝日)を取得
const events = calendar.getEvents(startDate, endDate);
// 各イベント(祝日)について繰り返し処理
for (const event of events) {
// 祝日の日付を取得し、日本のタイムゾーンで"yyyy/MM/dd"形式にフォーマット
const holidayDate = Utilities.formatDate(event.getStartTime(), "JST", "yyyy/MM/dd");
// 祝日の名前を取得
const holidayTitle = event.getTitle();
// 祝日の名前と日付をコンソールに出力
console.log(`${holidayTitle}: ${holidayDate}`);
}
}
-
holidayCalendarId
: この変数は、Googleカレンダー上で日本の祝日を表すカレンダーのIDを保持しています。これはGoogle Apps ScriptのgetCalendarById
メソッドでカレンダーを取得するために使われます。 -
calendar
: この変数は、holidayCalendarId
で指定されたIDを持つカレンダーのオブジェクトを保持します。このオブジェクトを使用してカレンダーからイベント(祝日)を取得します。 -
events
: この変数は、startDate
からendDate
の間のcalendar
カレンダー上の全てのイベント(祝日)を保持する配列(リスト)です。 -
event
: これはfor...ofループの中で使用される変数で、ループが進むたびにevents
配列の次の要素(祝日)を保持します。 -
holidayDate
: この変数は、現在のevent
(祝日)の開始時刻(実際には日付)を保持します。日付は "yyyy/MM/dd" 形式の文字列としてフォーマットされ、日本のタイムゾーン("JST")に基づいています。 -
holidayTitle
: この変数は、現在のevent
(祝日)のタイトル(つまり祝日の名前)を保持します。
エラー
マイカレンダー( https://calendar.google.com/ )に「日本の祝日」カレンダーが登録されていないとエラーになります。
エラー
TypeError: Cannot read properties of null (reading 'getEvents')
getHolidays @ コード.gs:8
カレンダーの追加画面でja.japanese.official#holiday@group.v.calendar.google.com
を入力して追加しましょう。
祝日を判定する
この関数isHoliday()
は特定の日付targetDate
が祝日であるかどうかを判定します。
function isHoliday(targetDate) {
// 日本の祝日カレンダーのIDを定義
const holidayCalendarId = 'ja.japanese.official#holiday@group.v.calendar.google.com';
// カレンダーIDを使用してカレンダーを取得
const calendar = CalendarApp.getCalendarById(holidayCalendarId);
// ターゲットの日付のイベント(祝日)を取得
const events = calendar.getEventsForDay(targetDate);
// イベントが存在するかどうかをチェック(存在すれば祝日、存在しなければ非祝日)
return events.length > 0;
}
// 使用例:2023年1月1日が祝日(元日)であることを確認
function main() {
const targetDate = new Date("2023/01/01"); // 特定の日付
console.log("日付: " + Utilities.formatDate(targetDate, "JST", "yyyy/MM/dd"));
if (isHoliday(targetDate)) {
console.log("○ きょうは祝日です。");
} else {
console.log("× 祝日ではないです。");
}
}
getEventsForDay()
でその日のイベント(祝日)を取得します。events
は配列なので祝日の場合は要素数が1
になります。
Discussion