【GAS】Google Apps Script 活用事例 土日を除く、営業日をご案内する方法
日付の処理って、クソ面倒くさい。
採用補助の仕事をするようになってから、〇〇月〇〇日() 〜 〇〇月〇〇日()の間で、面接希望日時を教えてください。みたいな感じで、ご案内する機会が増えました。実務では、翌々日〜(本日の日付から)4営業日後とご案内していたため、今回のスクリプトもそうなっています。
祝日まで、考慮に入れると、酷く複雑になってしまうため、今回は考慮に入れていません。普段、間違ってご案内していないかと、かなり神経を尖らせて対応しています。疲れるし、それがほぼ毎日あるので、自動化しました。
AIが、ほぼ全自動で、仕事をこなしてくれる世の中って、いつになったら来るのでしょうか?
スクリプトはこんな感じ
//9/3 ~9/9でご希望の日時を教えてください。
//翌々日を求める。ただし、土日を挟む場合は、必ずしも翌々日になるとは限らない。
function findStartDate() {
//2日後の日付を取得
const date = new Date();
const d = date.getDay();
console.log(`曜日: ${d}`);
if(d === 4){
//木曜日だったら、金、土、日をスキップして、4日後の月曜をご案内する。
date.setDate(date.getDate() + 4);
}else if(d === 5){
//金曜日だったら、土、日をスキップして、3日後の月曜をご案内する。
date.setDate(date.getDate() + 3);
}
else{
//月〜水まで
date.setDate(date.getDate() + 2);
}
//曜日の取得
const day = dayOfTheWeek(date.getDay());
const stringDate = (date, format) => {
return Utilities.formatDate(date, 'JST', format);
}
const targetDate = stringDate(date, 'yyyy/MM/dd');
console.log(targetDate);
return targetDate
}
function findEndDate() {
const date = new Date(findStartDate());//面接希望日
const maxDate = new Date()
maxDate.setDate(maxDate.getDate() + 14);
let count = 1;
let dateArray = [];//for文内のdが、そのままだと、スコープで取り出せない。配列に入れて取り出す。
for(let d = new Date(findStartDate()); d < maxDate; d.setDate(d.getDate()+1)) {
console.log('iの内容 %s',d);
const day = d.getDay();
if(day === 0 || day === 6){continue}//土日はカウントしない。
count += 1;
//4営業日に達したら、配列に入れる
if(count === 4){
dateArray.push(d);
}
//4営業日に達したら処理を終了
if (4 < count){
console.log('4営業日を超えたのでループを終了します。');
break;
}//if
}//for
const stringDate = (date, format) => {
return Utilities.formatDate(date, 'JST', format);
}
console.log(typeof dateArray[0]);
console.log(dateArray[0]);
//曜日と日付をセットで表示する。
const day1 = dayOfTheWeek(date.getDay());
const day2 = dayOfTheWeek(dateArray[0].getDay());
const startDate = stringDate(date, 'yyyy/MM/dd');
const endDate = stringDate(dateArray[0], 'yyyy/MM/dd');
console.log(startDate, endDate);
const generateDate = `${startDate} (${day1}) ~ ${endDate} (${day2})`;
console.log(generateDate);
}
function dayOfTheWeek(day) {
let string;
switch(day){
case 0: string = '日';
break;
case 1: string = '月';
break;
case 2: string = '火';
break;
case 3: string = '水';
break;
case 4: string = '木';
break;
case 5: string = '金';
break;
case 6: string = '土';
break;
}
return string
}
記事執筆中の今日は、木曜日なので、金、土、日をスキップして、4日後の月曜 さらに、月曜を1営業日とカウントして、3営業日後が、ご案内の最終日となります。
制約という縛りの中で、自動化をしようと思うと、なかなか大変で、頭を使いますが、やりごたえがありますね。
過去記事
この記事が気に入ったらサポートをしてみませんか?