実働日(営業日)を判定するモジュールを書いてみた
業務系のシステムに携わっている方には馴染み深いと思いますが、
「月初実働3日目に処理」とか「月末最終実働日に処理」とかよくある話ですよね。
この処理をしたい要件が出たのでcpanを漁ってみましたが
見つからなかったので書いてみました。
使い方
SYNOPSYSと同じですが。
use Calendar::Japanese::Business; # 何も指定しなければ、現在の年月で設定されます #my $c = Calendar::Japanese::Business->new; my $c = Calendar::Japanese::Business->new( { year => 2011, month => 5, custom_holiday => [2], # 休日に加えたい日を配列で指定します。 } ); # 2011/5 の 16実働日 のTimpe::Pieceオブジェクトを取得 $c->get_date_from_businessday(16); # => 2011/5/27 # 2011/5/16 の実働日を取得 $c->get_workday_from_day(16); # => 7 # 2011/5 の初回実働日のTime::Pieceオブジェクトを取得 $c->get_first_date; # => 2011/5/6 # 2011/5 の初回実働日を取得(意味なし) $c->get_first_workday; # => 1 # 2011/5 の最終実働日のTime::Pieceオブジェクトを取得 $c->get_last_date; # => 2011/5/31 # 2011/5 の最終実働日を取得 $c->get_last_workday; # => 18 # 2011/5 の実働日一覧 print Dumper( $c->dump );
休日かどうかの判定は
「土日」+「祝祭日(Calendar::Japanese::Holidayを利用)」
で判定しています。
さらに custom_holiday に設定しておくと
好きな日を休日にすることが可能です(会社の設立記念日など)
使用例
cronなどで直接指定したい場合。
以下のようなスクリプトを用意しておきます。
そしてcronで以下のような設定をしておきます。
例ではcronを毎時0時に実行し、その日の実働日を判定して
「実働3日目」であればmyscript.shを実行します。
0 * * * * perl check_workday.pl -d 3 && sh myscript.sh
Todo
- モジュール名とかサブルーチン名とか変えるかも、しれない
- バリデーションとか入れるかもしれない