|
Lines 707-713
C<$offset> Is the number of days that this function has to count from $date.
Link Here
|
| 707 |
|
707 |
|
| 708 |
sub addDate { |
708 |
sub addDate { |
| 709 |
my ($self, $startdate, $offset) = @_; |
709 |
my ($self, $startdate, $offset) = @_; |
| 710 |
$startdate = eval { output_pref( { dt => dt_from_string( $startdate ), dateonly => 1, dateformat => 'iso' } ); }; |
710 |
$startdate = eval { output_pref( { dt => $startdate, dateonly => 1, dateformat => 'iso' } ); }; |
| 711 |
my ( $year, $month, $day) = split( "-", $startdate ); |
711 |
my ( $year, $month, $day) = split( "-", $startdate ); |
| 712 |
my $daystep = 1; |
712 |
my $daystep = 1; |
| 713 |
if ($offset < 0) { # In case $offset is negative |
713 |
if ($offset < 0) { # In case $offset is negative |
|
Lines 731-773
sub addDate {
Link Here
|
| 731 |
($year, $month, $day) = &Date::Calc::Add_Delta_Days($year, $month, $day, $offset ); |
731 |
($year, $month, $day) = &Date::Calc::Add_Delta_Days($year, $month, $day, $offset ); |
| 732 |
} |
732 |
} |
| 733 |
my $date_ret = sprintf(ISO_DATE_FORMAT,$year,$month,$day); |
733 |
my $date_ret = sprintf(ISO_DATE_FORMAT,$year,$month,$day); |
| 734 |
$date_ret = eval { output_pref( { dt => dt_from_string( $date_ret), dateonly => 1, dateformat => 'iso' } ); }; |
|
|
| 735 |
return($date_ret); |
734 |
return($date_ret); |
| 736 |
} |
735 |
} |
| 737 |
|
736 |
|
| 738 |
=head2 daysBetween |
|
|
| 739 |
|
| 740 |
my $daysBetween = $calendar->daysBetween($startdate, $enddate) |
| 741 |
|
| 742 |
C<$startdate> and C<$enddate> define the interval. |
| 743 |
|
| 744 |
Returns the number of non-holiday days in the interval. |
| 745 |
useDaysMode syspref has no effect here. |
| 746 |
=cut |
| 747 |
|
| 748 |
sub daysBetween { |
| 749 |
my $self = shift or return; |
| 750 |
my $startdate = shift or return; |
| 751 |
my $enddate = shift or return; |
| 752 |
$startdate = eval { output_pref( { dt => dt_from_string( $startdate ), dateonly => 1, dateformat => 'iso' } ); }; |
| 753 |
$enddate = eval { output_pref( { dt => dt_from_string( $enddate ), dateonly => 1, dateformat => 'iso' } ); }; |
| 754 |
my ( $yearFrom, $monthFrom, $dayFrom) = split( "-", $startdate); |
| 755 |
my ( $yearTo, $monthTo, $dayTo ) = split( "-", $enddate); |
| 756 |
if (Date_to_Days($yearFrom,$monthFrom,$dayFrom) > Date_to_Days($yearTo,$monthTo,$dayTo)) { |
| 757 |
return 0; |
| 758 |
# we don't go backwards ( FIXME - handle this error better ) |
| 759 |
} |
| 760 |
my $count = 0; |
| 761 |
while (1) { |
| 762 |
($yearFrom != $yearTo or $monthFrom != $monthTo or $dayFrom != $dayTo) or last; # if they all match, it's the last day |
| 763 |
unless ($self->isHoliday($dayFrom, $monthFrom, $yearFrom)) { |
| 764 |
$count++; |
| 765 |
} |
| 766 |
($yearFrom, $monthFrom, $dayFrom) = &Date::Calc::Add_Delta_Days($yearFrom, $monthFrom, $dayFrom, 1); |
| 767 |
} |
| 768 |
return($count); |
| 769 |
} |
| 770 |
|
| 771 |
1; |
737 |
1; |
| 772 |
|
738 |
|
| 773 |
__END__ |
739 |
__END__ |