スポンサーリンク
GASを使っていると翌営業日を取得する処理を使う事が多いのでメモ…
やりたい事
- 次の日を休日かどうか判定し、休日だったらその次の日を取得
- 連休の場合もあるので、上記の処理を営業日まで繰り返す
使用ライブラリ
今回は日付の処理にMoment.jsライブラリを使用しています。
スクリプトID: MHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48
休日かどうかを判別する
まずは休日かどうかを判別する処理を作ります。
/**
* 休日かどうかを判定する関数
* @param {Date} 判定する日付
* @return {boolean} 休日ならtrueを返す
*/
function isHoliday(date) {
var calendars = CalendarApp.getCalendarsByName("日本の祝日");
var count = calendars[0].getEventsForDay(date).length;
var day = date.getDay(); //曜日取得
return (day === 0 || day === 6 || count === 1);
}
渡したdate
を元に土曜日・日曜日・祝日を判別して真偽を返すだけのシンプルな処理です。
翌営業日を取得する
今日の日付を元に1日後を取得し、先ほど作ったisHoliday()
で休日判別します。
/**
* 翌営業日を取得する関数
* @param {Date} 今日の日付
* @return {Date} 翌営業日の日付
*/
function getNextWorkingDay(date){
var isHolidayFlag = true;
var i = 1;
var next_working_day;
while(isHolidayFlag){
next_working_day = Moment.moment(date).clone().add('days',i).toDate();
isHolidayFlag = isHoliday(next_working_day);
i++;
}
return next_working_day;
}
isHolidayFlag
の初期値をtrue
にしてwhile()
で処理することによって連休にも対応できるようにしてあります。
実行する際の注意点
isHoliday()
を使用する際に日付がDate型でないとエラーになるので、Moment.jsのtoDate()
を使用してDate型にフォーマットしてから渡します。
function test(){
var today = Moment.moment().toDate();
var next_working_day = getNextWorkingDay(today);
Logger.log(Moment.moment(next_working_day).format());
}
まぁ、普通にnew Date()
使えば良いんですが、moment.jsを使った方が、色々と使い回しができそうなのでこの形にしました。
完成
function test(){
var today = Moment.moment().toDate();
var next_working_day = getNextWorkingDay(today);
Logger.log(Moment.moment(next_working_day).format());
}
/**
* 翌営業日を取得する関数
* @param {Date} 今日の日付
* @return {Date} 翌営業日の日付
*/
function getNextWorkingDay(date){
var isHolidayFlag = true;
var i = 1;
var next_working_day;
while(isHolidayFlag){
next_working_day = Moment.moment(date).clone().add('days',i).toDate();
isHolidayFlag = isHoliday(next_working_day);
i++;
}
return next_working_day;
}
/**
* 休日かどうかを判定する関数
* @param {Date} 判定する日付
* @return {boolean} 休日ならtrueを返す
*/
function isHoliday(date) {
var calendars = CalendarApp.getCalendarsByName("日本の祝日");
var count = calendars[0].getEventsForDay(date).length;
var day = date.getDay(); //曜日取得
return (day === 0 || day === 6 || count === 1);
}
そんなに複雑な処理ではないですが、利用頻度が高そうだったのでまとめておきました。
スポンサーリンク