見出し画像

【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
}

スクリーンショット 2020-09-03 19.22.18

記事執筆中の今日は、木曜日なので、金、土、日をスキップして、4日後の月曜 さらに、月曜を1営業日とカウントして、3営業日後が、ご案内の最終日となります。

制約という縛りの中で、自動化をしようと思うと、なかなか大変で、頭を使いますが、やりごたえがありますね。

過去記事


この記事が気に入ったらサポートをしてみませんか?