GASで営業日を取得するには?

GASの時間処理について、下記で解説を行いました。

【GAS】日付・時間の処理まとめ! UNIX時間・formatDate・Dateオブジェクトを理解しよう

しかし営業日を判定するには、GASを理解するだけではなく、もう一工夫が必要です。

今回は第一営業日・最終営業日を取得する方法を解説していきます。書いてある事をよりちゃんと理解しようという場合は上記の記事を参照してみて下さい。

休日・祝日がカレンダー通りの場合

まずは休日・祝日がカレンダー通りの場合です。土日と祝日が休みで、他に独自の休日はないというケースですね。

第一営業日を取得する

この場合は下記のスクリプトで第一営業日を取得できます。

function 今月の第一営業日を取得する()
{
  //先月の月末を取得する
  var 今年 = new Date().getFullYear()
  var 今月 = new Date().getMonth()
  var Dateオブジェクト = new Date(今年,今月,0)

  //今月の1日が祝日 or 土日ならDateオブジェクトに1日足す
  var UNIX時間_1日 = 1 * 24 * 60 * 60 * 1000
  while(!祝日じゃない || !土日じゃない)
  {
    var UNIX時間_1日後 = Dateオブジェクト.getTime() + UNIX時間_1日
    var Dateオブジェクト = new Date(UNIX時間_1日後)
    var 祝日カレンダー = "ja.japanese#[email protected]"; 
    var 祝日じゃない = CalendarApp.getCalendarById(祝日カレンダー).getEventsForDay(Dateオブジェクト).length == 0
    var 土日じゃない = Dateオブジェクト.getDay() != 0 && Dateオブジェクト.getDay() != 6
  }

  //Dateオブジェクトが第一営業日になっている
  Logger.log(Dateオブジェクト)
}

全体の流れはざっくり下記です。

  1. 先月の月末を取得する
  2. 1日をミリ秒にして取得する
  3. 日付を次の日にする
  4. 祝日かどうか判定する
  5. 土日かどうか判定する
  6. 土日か祝日だったら3-6を繰り返す。平日だったら終了する

それぞれの部分を解説していきます。

1. 先月の月末を取得する