こんにちは、もりです!
この記事では、日付の計算処理のひとつ「月末マイナスn営業日」を求めるスクリプトを紹介します。
スポンサーリンク
月末マイナスn営業日 とは
2020年の10月を例にみてみましょう。前提として「土日祝日休み」とします。
10月の月末最終日は「2020/10/31」ですが、この日は土曜日なので、1日前の「2020/10/30(金)」が「最終営業日」です。最終営業日から1営業日ずつマイナスすると、こうなります。
マイナス 1 営業日:2020/10/29(木)
マイナス 2 営業日:2020/10/28(水)
マイナス 3 営業日:2020/10/27(火)
・
・
・
2020年10月のカレンダーです↓
月末マイナスn営業日を求めるスクリプト
営業日の判定関数はこちらの記事で紹介しています。
基準日が属する月の「月末マイナス3営業日」を求める処理です。下記2か所はご自身で設定してください。
- 4行目:基準日を設定
- 13行目:マイナスする営業日数を設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
function myFunction() { // 基準日を設定 const date = new Date('2020/11/01'); // 基準日が属する月の「月末最終日」を求める const eomonth_date = new Date(date.getFullYear(), date.getMonth() + 1 ,0); console.log(Utilities.formatDate(eomonth_date,'JST','yyyy/MM/dd')); //log => 2020/11/30 // マイナスn営業日を求める let minus_date = eomonth_date; const minus_day = 3; //マイナスn営業日 let cnt = 0; while (cnt < minus_day) { if (!isHoliday_(minus_date)) cnt++; minus_date.setDate(minus_date.getDate()-1); } console.log(Utilities.formatDate(minus_date,'JST','yyyy/MM/dd')); //log => 2020/11/25 } /** * 休日か否かを判定する関数 * * @param {Date} 判定する日付 * @return {boolean} 休日ならtrueを返す */ function isHoliday_(date) { // ①土日の判定 const day = date.getDay(); //曜日取得 if (day === 0 || day === 6) return true; // ②祝日の判定 const id = 'ja.japanese#holiday@group.v.calendar.google.com'; const calendar = CalendarApp.getCalendarById(id); const events = calendar.getEventsForDay(date); if (events.length) return true; //なんらかのイベントがある = 祝日 // ③特定の休日判定 const specialHoliday = [ '0101', '0102', '1229', '1230', '1231' ]; const mmdd = Utilities.formatDate(date, 'JST', 'MMdd'); //someメソッドでtrue/falseいずれかが返る return specialHoliday.some(value => value === mmdd); } |
2020年11月の「月末マイナス3営業日」は「2020/11/25(水)」です。スクリプトで求めることができました。
つづいて2020年12月です。isHoliday関数で、年末の29日~31日を休日に設定しています。
スクリプトの基準日を12月日付にすると、月末マイナス3営業日の「2020/12/23(水)」を求めることができます。