X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lib%2FHTML%2FCalendarMonth%2FDateTool%2FDateTime.pm;fp=lib%2FHTML%2FCalendarMonth%2FDateTool%2FDateTime.pm;h=b0727ac0151b372eb14c9dff4842be65a28af6bf;hb=ed44be48bb467d82127717d1ae2d11890aaf329b;hp=0000000000000000000000000000000000000000;hpb=982e2bb08f00d800e2cd9fb65b108231719c8a65;p=deb_pkgs%2Flibhtml-calendarmonth-perl.git diff --git a/lib/HTML/CalendarMonth/DateTool/DateTime.pm b/lib/HTML/CalendarMonth/DateTool/DateTime.pm new file mode 100644 index 0000000..b0727ac --- /dev/null +++ b/lib/HTML/CalendarMonth/DateTool/DateTime.pm @@ -0,0 +1,85 @@ +package HTML::CalendarMonth::DateTool::DateTime; +{ + $HTML::CalendarMonth::DateTool::DateTime::VERSION = '1.26'; +} + +# 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;