package HTML::CalendarMonth::DateTool::DateCalc; { $HTML::CalendarMonth::DateTool::DateCalc::VERSION = '1.26'; } # Interface to Date::Calc use strict; use warnings; use Carp; use base qw( HTML::CalendarMonth::DateTool ); use Date::Calc qw( Days_in_Month Day_of_Week Add_Delta_Days Weeks_in_Year Week_of_Year Week_Number Mktime ); sub dow1st_and_lastday { my($self, $month, $year) = @_; $month ||= $self->month; $year ||= $self->year; ($self->dow(1), Days_in_Month($year, $month)); } sub day_epoch { my($self, $day, $month, $year) = @_; $month ||= $self->month; $year ||= $self->year; Mktime($year, $month, $day, 0, 0, 0); } sub dow { my($self, $day, $month, $year) = @_; $day || croak "day required.\n"; $month ||= $self->month; $year ||= $self->year; # Date::Calc uses 1..7 as indicies in the week, starting with Monday. # Convert to 0..6, starting with Sunday. Day_of_Week($year, $month, $day) % 7; } sub add_days { my($self, $delta, $day, $month, $year) = @_; defined $delta || croak "delta (in days) required.\n"; $day || croak "day required.\n"; $month ||= $self->month; $year ||= $self->year; my($y, $m, $d) = Add_Delta_Days($year, $month, $day, $delta); ($d, $m, $y); } sub week_of_year { my($self, $day, $month, $year) = @_; $day || croak "day required.\n"; $month ||= $self->month; $year ||= $self->year; my $week; ($week, $year) = Week_of_Year($year, $month, $day); ($year, $week); } 1;