]> git.donarmstrong.com Git - deb_pkgs/libhtml-calendarmonth-perl.git/blobdiff - 1.19/lib/HTML/CalendarMonth/DateTool/DateCalc.pm
[svn-upgrade] Tagging new upstream version, libhtml-calendarmonth-perl (1.19)
[deb_pkgs/libhtml-calendarmonth-perl.git] / 1.19 / lib / HTML / CalendarMonth / DateTool / DateCalc.pm
diff --git a/1.19/lib/HTML/CalendarMonth/DateTool/DateCalc.pm b/1.19/lib/HTML/CalendarMonth/DateTool/DateCalc.pm
new file mode 100644 (file)
index 0000000..90612f6
--- /dev/null
@@ -0,0 +1,66 @@
+package HTML::CalendarMonth::DateTool::DateCalc;
+
+# Interface to Date::Calc
+
+use strict;
+use Carp;
+
+use vars qw(@ISA $VERSION);
+
+@ISA = qw(HTML::CalendarMonth::DateTool);
+
+$VERSION = '0.03';
+
+use Date::Calc qw(Days_in_Month Day_of_Week Add_Delta_Days
+                  Weeks_in_Year Week_of_Year Week_Number Mktime
+                 );
+
+sub dow1st_and_lastday {
+  my($self, $month, $year) = @_;
+  $month ||= $self->month;
+  $year  ||= $self->year;
+  my $lastday = Days_in_Month($year, $month);
+  # Date::Calc uses 1..7 as indicies in the week, starting with Monday.
+  # Internally, we use 0..6, starting with Sunday. These turn out to be
+  # identical except for Sunday.
+  my $dow1st = $self->dow(1);
+  $dow1st = 0 if $dow1st == 7;
+  ($dow1st, $lastday);
+}
+
+sub day_epoch {
+  my($self, $day, $month, $year) = @_;
+  $month ||= $self->month;
+  $year  ||= $self->year;
+  Mktime($year, $month, $day, 0, 0, 0);
+}
+
+sub dow {
+  my($self, $day, $month, $year) = @_;
+  $day || croak "Day required.\n";
+  $month ||= $self->month;
+  $year  ||= $self->year;
+  Day_of_Week($year, $month, $day);
+}
+
+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($y, $m, $d) = Add_Delta_Days($year, $month, $day, $delta);
+  ($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;
+  ($week, $year) = Week_of_Year($year, $month, $day);
+  ($year, $week);
+}
+
+1;