X-Git-Url: https://git.donarmstrong.com/?p=deb_pkgs%2Flibhtml-calendarmonth-perl.git;a=blobdiff_plain;f=1.25%2Flib%2FHTML%2FCalendarMonth%2FDateTool%2FDateTime.pm;fp=1.25%2Flib%2FHTML%2FCalendarMonth%2FDateTool%2FDateTime.pm;h=a0b98b315f6df9be60bcaa6022bd534e031c2f07;hp=0000000000000000000000000000000000000000;hb=1a48ee7ffa0db08c3c5af68b365ee274acbd485d;hpb=2a7fc55a2e563096c7348a2f6272a16830561513 diff --git a/1.25/lib/HTML/CalendarMonth/DateTool/DateTime.pm b/1.25/lib/HTML/CalendarMonth/DateTool/DateTime.pm new file mode 100644 index 0000000..a0b98b3 --- /dev/null +++ b/1.25/lib/HTML/CalendarMonth/DateTool/DateTime.pm @@ -0,0 +1,85 @@ +package HTML::CalendarMonth::DateTool::DateTime; +BEGIN { + $HTML::CalendarMonth::DateTool::DateTime::VERSION = '1.25'; +} + +# Interface to DateTime + +use strict; +use warnings; +use Carp; + +use base qw( HTML::CalendarMonth::DateTool ); + +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); + # convert from 1..7, starting with Mon, to 0..6, starting with Sun + $dt->dow % 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 $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;