S.B.S. Salesforce技術ブログ

教えて921さん!

何営業日後の日付(特定曜日を除いた日数計算)

yumotoです。

ある日付から何営業日後の日付の値(今回の場合、土日を除いた日付)を返すプログラムを作りました。

活動の記録等を入力したら、その何営業日後が期限のフォローアップTodoをトリガで自動生成するときや、
今日から10営業日後、などの日付が必要なときに使えるかと。

割と汎用的に作ったのでコピペするだけで使えると思います。

何営業日後というのを返すプログラム

/**
*  対象日の何営業日後(土日除いた)という値を返す
*  例:対象日2021/04/21, 8営業日後 ⇒ 戻り値:2021/05/03
*  @param    taisyoubi    対象日
*  @param    plusDay    何営業日後か
*/
private Date culcPlusDay(Date taisyoubi,Integer plusDay){
    if(taisyoubi== null) return null;
    Date tempDate = taisyoubi;
    
    Integer count = 0;
    while(count < plusDay){
        tempDate += 1;
        Datetime dt = Datetime.newInstance(tempDate.year(),tempDate.Month(),tempDate.day());
        if(dt.format('E') != 'Sat' && dt.format('E') != 'Sun'){
            count ++;
        }
    }
    return tempDate;
}

解説

使用方法としては
taisyobiに元となる日付
plusdayに何営業日後を表す数字
を入れてあげれば戻り値として何営業日後か計算された日付が返ってきます。 f:id:sbsSF:20210421164348p:plain

プログラムの中では土曜日と日曜日を除いていますが。
while文の中のif文中の条件を変えてあげるだけで、曜日を変更できます。

曜日について

apexではDate型から直接、曜日を割り出すようなAPIは用意されていないようです。
そのため曜日を割り出すには一度Datetime型に変換する必要があります。
変換したDatetime型の変数をformat('E')してあげることにより曜日が出力されます。
曜日の出力結果一覧はこちら。 f:id:sbsSF:20210421162534p:plain

まとめ

祝日や、その組織を使っている会社の独特の休日等を考慮に入れる場合は
祝休日マスタのようなオブジェクトを作る必要があるかと思います。

今回はあくまでも単純に土日だけを除いたプログラムでした

ぜひ活用してみてください。