]> git.donarmstrong.com Git - deb_pkgs/libhtml-calendarmonth-perl.git/blob - lib/HTML/CalendarMonth/DateTool/DateTime.pm
upgrade to 1.26; fix lintian issues
[deb_pkgs/libhtml-calendarmonth-perl.git] / lib / HTML / CalendarMonth / DateTool / DateTime.pm
1 package HTML::CalendarMonth::DateTool::DateTime;
2 {
3   $HTML::CalendarMonth::DateTool::DateTime::VERSION = '1.26';
4 }
5
6 # Interface to DateTime
7
8 use strict;
9 use warnings;
10 use Carp;
11
12 use base qw( HTML::CalendarMonth::DateTool );
13
14 use DateTime;
15
16 sub dow1st_and_lastday {
17   my($self, $month, $year) = @_;
18   $month ||= $self->month;
19   $year  ||= $self->year;
20   my $lastday = $self->_last_dom_dt($year, $month);
21   my $dow1st = $self->dow(1);
22   ($dow1st, $lastday->day);
23 }
24
25 sub day_epoch {
26   my($self, $day, $month, $year) = @_;
27   $day || croak "day required.\n";
28   $month ||= $self->month;
29   $year  ||= $self->year;
30   my $dt = $self->_new_dt($year, $month, $day);
31   $dt->epoch;
32 }
33
34 sub dow {
35   my($self, $day, $month, $year) = @_;
36   $day || croak "day required.\n";
37   $month ||= $self->month;
38   $year  ||= $self->year;
39   my $dt = $self->_new_dt($year, $month, $day);
40   # convert from 1..7, starting with Mon, to 0..6, starting with Sun
41   $dt->dow % 7;
42 }
43
44 sub add_days {
45   my($self, $delta, $day, $month, $year) = @_;
46   defined $delta || croak "delta (in days) required.\n";
47   $day   || croak "day required.\n";
48   $month ||= $self->month;
49   $year  ||= $self->year;
50   my $dt = $self->_new_dt($year, $month, $day);
51   $dt->add(days => $delta);
52   ($dt->day, $dt->month, $dt->year);
53 }
54
55 sub week_of_year {
56   my($self, $day, $month, $year) = @_;
57   $day || croak "day required.\n";
58   $month ||= $self->month;
59   $year  ||= $self->year;
60   my $dt = $self->_new_dt($year, $month, $day);
61   # returns ($year, $week)
62   $dt->week;
63 }
64
65 sub _new_dt {
66   my $self = shift;
67   my($year, $month, $day) = @_;
68   $year or croak "year and month required\n";
69   my %parms = (year => $year);
70   $parms{month} = $month if $month;
71   $parms{day}   = $day    if $day;
72   $parms{hour} = 0;
73   $parms{minute} = 0;
74   $parms{second} = 0;
75   DateTime->new(%parms);
76 }
77
78 sub _last_dom_dt {
79   my $self = shift;
80   my($year, $month) = @_;
81   $year && $month or croak "year and month required.\n";
82   DateTime->last_day_of_month(year => $year, month => $month);
83 }
84
85 1;