Date::Japanese::Holiday を利用して Date::Simple に営業日を加算・減算する method を追加
強引ですが。
package Date::Japanese::BusinessDay; use strict; use warnings; use vars qw($VERSION); $VERSION = '0.01'; use base qw(Date::Japanese::Holiday); use Class::Data::Inheritable; package Date::Simple; { no strict 'refs'; *{__PACKAGE__ . '::mk_classdata'} = \&Class::Data::Inheritable::mk_classdata; } __PACKAGE__->mk_classdata(two_day_weekend => 0); sub increment_business_day { my $self = shift; my ($day) = @_; my $result = $self; for ( my $count = 0, my $increment = (0 <= $day ? 1 : -1) ; (0 <= $day && $count < $day) || ($day < 0 && $day < $count) ; ) { $result += $increment; next if $result->is_holiday || $result->two_day_weekend == 1 && $result->day_of_week == 6; $count += $increment; } return $result; } sub next_business_day {return shift->add_business_day(1)} sub prev_business_day {return shift->add_business_day(-1)} 1;
こうやって使います。
use Date::Japanese::BusinessDay; my $d = Date::Japanese::BusinessDay->new; # or Date::Simple->new; $d->two_day_weekend(1); $d->increment_business_day(10); $d->increment_business_day(-10);
two_day_weekend に 1 を設定すると、土曜日を休日として計算します。