X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lib%2FHTML%2FCalendarMonth%2FDateTool%2FDateManip.pm;fp=lib%2FHTML%2FCalendarMonth%2FDateTool%2FDateManip.pm;h=2531d1d97595e6f3466eea5ceded29369e51f94a;hb=ed44be48bb467d82127717d1ae2d11890aaf329b;hp=0000000000000000000000000000000000000000;hpb=982e2bb08f00d800e2cd9fb65b108231719c8a65;p=deb_pkgs%2Flibhtml-calendarmonth-perl.git diff --git a/lib/HTML/CalendarMonth/DateTool/DateManip.pm b/lib/HTML/CalendarMonth/DateTool/DateManip.pm new file mode 100644 index 0000000..2531d1d --- /dev/null +++ b/lib/HTML/CalendarMonth/DateTool/DateManip.pm @@ -0,0 +1,73 @@ +package HTML::CalendarMonth::DateTool::DateManip; +{ + $HTML::CalendarMonth::DateTool::DateManip::VERSION = '1.26'; +} + +# Interface to Date::Manip + +use strict; +use warnings; +use Carp; + +use base qw( HTML::CalendarMonth::DateTool ); + +use Date::Manip qw( + Date_DaysInMonth + Date_DayOfWeek + DateCalc + UnixDate + Date_SecsSince1970 + ParseDateDelta +); + +sub dow1st_and_lastday { + my($self, $month, $year) = @_; + $month ||= $self->month; + $year ||= $self->year; + ($self->dow(1), Date_DaysInMonth($month, $year)); +} + +sub day_epoch { + my($self, $day, $month, $year) = @_; + $day || croak "day required.\n"; + $month ||= $self->month; + $year ||= $self->year; + Date_SecsSince1970($month, $day, $year, 0, 0, 0); +} + +sub dow { + # Date::Manip uses 1..7 as indicies in the week, starting with Monday. + # Convert to 0..6 starting with Sunday. + my($self, $day, $month, $year) = @_; + $day || croak "day required.\n"; + $month ||= $self->month; + $year ||= $self->year; + Date_DayOfWeek($month, $day, $year) % 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 $date = DateCalc( + sprintf("%04d%02d%02d", $year, $month, $day), + "$delta days" + ); + my($y, $m, $d) = $date =~ /^(\d{4})(\d\d)(\d\d)/; + $_ += 0 foreach ($y, $m, $d); + ($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 = UnixDate(sprintf("%04d%02d%02d", $year, $month, $day), '%U'); + $week += 0; + ($year, $week); +} + +1;