X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=1.19%2Flib%2FHTML%2FCalendarMonth%2FDateTool%2FDateTime.pm;fp=1.19%2Flib%2FHTML%2FCalendarMonth%2FDateTool%2FDateTime.pm;h=9e6e13c4e4ba370ca859f25ccf0cdfca39c1ee9a;hb=e572b7973fb212cb24fbefc385f28f473f02df0c;hp=0000000000000000000000000000000000000000;hpb=9d8d5103edda5befbcae635c8a6edebe7431e094;p=deb_pkgs%2Flibhtml-calendarmonth-perl.git diff --git a/1.19/lib/HTML/CalendarMonth/DateTool/DateTime.pm b/1.19/lib/HTML/CalendarMonth/DateTool/DateTime.pm new file mode 100644 index 0000000..9e6e13c --- /dev/null +++ b/1.19/lib/HTML/CalendarMonth/DateTool/DateTime.pm @@ -0,0 +1,84 @@ +package HTML::CalendarMonth::DateTool::DateTime; + +# Interface to DateTime + +use strict; +use Carp; + +use vars qw(@ISA $VERSION); + +@ISA = qw(HTML::CalendarMonth::DateTool); + +$VERSION = '0.02'; + +use DateTime; + +sub dow1st_and_lastday { + my($self, $month, $year) = @_; + $month ||= $self->month; + $year ||= $self->year; + my $lastday = $self->_last_dom_dt($year, $month); + my $dow1st = $self->dow(1); + ($dow1st, $lastday->day); +} + +sub day_epoch { + my($self, $day, $month, $year) = @_; + $day || croak "Day required.\n"; + $month ||= $self->month; + $year ||= $self->year; + my $dt = $self->_new_dt($year, $month, $day); + $dt->epoch; +} + +sub dow { + my($self, $day, $month, $year) = @_; + $day || croak "Day required.\n"; + $month ||= $self->month; + $year ||= $self->year; + my $dt = $self->_new_dt($year, $month, $day); + $dt->dow; +} + +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 $dt = $self->_new_dt($year, $month, $day); + $dt->add(days => $delta); + ($dt->day, $dt->month, $dt->year); +} + +sub week_of_year { + my($self, $day, $month, $year) = @_; + $day || croak "Day required.\n"; + $month ||= $self->month; + $year ||= $self->year; + my $dt = $self->_new_dt($year, $month, $day); + # returns ($year, $week) + $dt->week; +} + +sub _new_dt { + my $self = shift; + my($year, $month, $day) = @_; + $year or croak "year and month required\n"; + my %parms = (year => $year); + $parms{month} = $month if $month; + $parms{day} = $day if $day; + $parms{hour} = 0; + $parms{minute} = 0; + $parms{second} = 0; + DateTime->new(%parms); +} + +sub _last_dom_dt { + my $self = shift; + my($year, $month) = @_; + $year && $month or croak "Year and month required.\n"; + DateTime->last_day_of_month(year => $year, month => $month); +} + +1;