こんにちは、もりです!
この記事では、GASの日付の計算処理のひとつ「月末日のマイナスn営業日」を求めるスクリプトを紹介します。
スポンサーリンク
マイナスn営業日 とは
まず、前提として「土日祝日休み」とします。
2020年10月を例にみてみましょう。
2020年10月の月末日「2020/10/31」は土曜日なので、1日前の「2020/10/30(金)」が「最終営業日」です。
最終営業日から1営業日ずつマイナスすると、以下のようになります。
マイナス 1 営業日:2020/10/29(木)
マイナス 2 営業日:2020/10/28(水)
マイナス 3 営業日:2020/10/27(火)
・
・
・
2020年10月のカレンダー↓
GASで月末マイナスn営業日を求める
基準日が属する月の「月末マイナスn営業日」を求めるスクリプトを紹介します(nの数字は変更可能)。
ここでは、2020年11月の「月末マイナス3営業日」を求めます。
土日を除くので、マイナス3営業日は「2020/11/25(水)」です。
営業日の判定関数はこちらの記事で紹介しているものを使用します。
スクリプトの、以下の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 63 64 65 |
function myFunction() { // 基準日を設定 const d = new Date("2020/11/01"); // 基準日が属する月の「月末最終日」を求める const eomonth_date = new Date(d.getFullYear(), d.getMonth() + 1, 0); console.log(Utilities.formatDate(eomonth_date, "JST", "yyyy/MM/dd")); //log => 2020/11/30 // マイナスn営業日の設定 let date = eomonth_date; const minus_day = 3; //マイナスn営業日 let cnt = 0; while (cnt <= minus_day) { //false = 平日 if (!isHoliday_(date)) cnt++; //条件を満たした直後にdateがマイナスされるのを防ぐ if(cnt > minus_day) break; date.setDate(date.getDate() - 1); } console.log(Utilities.formatDate(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年12月です。isHoliday関数の③で、年末の29日~31日を休日に設定しています。
スクリプトの基準日を12月日付にすると、月末マイナス3営業日の「2020/12/23(水)」を求めることができます。
トリガーと組み合わせたりして、うまく活用してみてくださいね。
スポンサーリンク
スポンサーリンク