指定した2つの日付の間に営業日が何日あるかを取得するコードの例です
それを実現するために以下を取得しています
- 範囲内の日曜日
- 範囲内の土曜日
- 範囲内の祝日
- それ以外は平日=営業日
日曜日と土曜日はnew Date("日付").getDay() で得られる曜日番号で取得しています
祝日はGoogleカレンダーの日本の祝日から取得して public_holidays_obj でオブジェクトにしています
コード.gs
function get_days(){ var start = "2018/01/01"; var end = "2018/02/01"; var start_date = new Date(start); var end_date = new Date(end); var diff = (end_date - start_date) / 1000 / 60 / 60 / 24; var weeks = Math.floor(diff / 7); var rest_days = (diff % 7); var days_obj = get_each_days(start_date, diff); Logger.log([days_obj, days_obj["weekdays"].length]) } function get_each_days(start_date, diff) { var obj = {} var sundays = obj["sundays"] = []; var saturdays = obj["saturdays"] = []; var public_holidays = obj["public_holidays"] = []; var weekdays = obj["weekdays"] = []; for(var i = 0; i < diff; i++){ var year_now = start_date.getFullYear(); var month_now = start_date.getMonth(); var date_now = start_date.getDate(); var new_date = new Date(year_now, month_now, date_now + i); var day = new_date.getDay(); var date = Utilities.formatDate(new_date, 'Asia/Tokyo', 'yyyy/MM/dd'); if(day == 0){ sundays.push(date); }else if(day == 6){ saturdays.push(date); }else if(public_holidays_obj[date]){ public_holidays.push(date); }else{ weekdays.push(date); } } return obj; } var public_holidays_obj = { "2018/01/01": "元日", "2018/01/08": "成人の日", "2018/02/11": "建国記念の日", "2018/02/12": "建国記念の日 振替休日", "2018/03/21": "春分の日", "2018/04/29": "昭和の日", "2018/04/30": "昭和の日 振替休日", "2018/05/03": "憲法記念日", "2018/05/04": "みどりの日", "2018/05/05": "こどもの日", "2018/07/16": "海の日", "2018/08/11": "山の日", "2018/09/17": "敬老の日", "2018/09/23": "秋分の日", "2018/09/24": "秋分の日 振替休日", "2018/10/08": "体育の日", "2018/11/03": "文化の日", "2018/11/23": "勤労感謝の日", "2018/12/23": "天皇誕生日", "2018/12/24": "天皇誕生日 振替休日" } |
意訳この機能がやること startの日付を決める endの日付を決める(この日付になるまで) new Dateにstartを渡して new Dateにendを渡して その日数を計算して(ミリ秒で出るので÷1000で秒に、÷60で分に、÷60で時間に、÷24で日数になる) その日数を7で割って何週間か計算して あまった日数を計算して get_each_daysにstart_date, diffを渡して 返ってきたオブジェクトとweekdaysの数をログに出す この機能がやること 以下のオブジェクトを用意する obj = { sundays: [], saturdays: [], public_holidays: [], weekdays: [] } 渡されたdiff(日数)の数だけ以下を繰り返す 渡されたstart_dateの西暦を取得して 月を取得して 日付を取得して 日付に1ずつ日数を足して 曜日の番号を取得→ 0 は日曜日で 1は月曜日~ 6 は土曜日 yyyy/MM/ddの形にフォーマットして もし0なら(日曜日なら) sundaysの配列に追加して もし6なら(土曜日なら) saturdaysの配列に追加して もしpublic_holidays_objにあれば public_holidays配列に追加して それ以外なら weekdays配列に追加する 出来上がったobjを返す public_holidays_objのオブジェクトを用意する |
実行結果
weekdaysのlengthで取得した日数がログに出ます
関連記事
Googleカレンダーで日本の祝日を取得してJSONで保存する
Utilities.formatDate()で日付をフォーマットする
参考
Date.prototype.getDay()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay