]> git.donarmstrong.com Git - deb_pkgs/libhtml-calendarmonth-perl.git/blobdiff - lib/HTML/CalendarMonth/DateTool/DateManip.pm
Imported Upstream version 2.04
[deb_pkgs/libhtml-calendarmonth-perl.git] / lib / HTML / CalendarMonth / DateTool / DateManip.pm
diff --git a/lib/HTML/CalendarMonth/DateTool/DateManip.pm b/lib/HTML/CalendarMonth/DateTool/DateManip.pm
new file mode 100644 (file)
index 0000000..2531d1d
--- /dev/null
@@ -0,0 +1,73 @@
+package HTML::CalendarMonth::DateTool::DateManip;
+{
+  $HTML::CalendarMonth::DateTool::DateManip::VERSION = '1.26';
+}
+
+# Interface to Date::Manip
+
+use strict;
+use warnings;
+use Carp;
+
+use base qw( HTML::CalendarMonth::DateTool );
+
+use Date::Manip qw(
+  Date_DaysInMonth
+  Date_DayOfWeek
+  DateCalc
+  UnixDate
+  Date_SecsSince1970
+  ParseDateDelta
+);
+
+sub dow1st_and_lastday {
+  my($self, $month, $year) = @_;
+  $month ||= $self->month;
+  $year  ||= $self->year;
+  ($self->dow(1), Date_DaysInMonth($month, $year));
+}
+
+sub day_epoch {
+  my($self, $day, $month, $year) = @_;
+  $day || croak "day required.\n";
+  $month ||= $self->month;
+  $year  ||= $self->year;
+  Date_SecsSince1970($month, $day, $year, 0, 0, 0);
+}
+
+sub dow {
+  # Date::Manip uses 1..7 as indicies in the week, starting with Monday.
+  # Convert to 0..6 starting with Sunday.
+  my($self, $day, $month, $year) = @_;
+  $day   || croak "day required.\n";
+  $month ||= $self->month;
+  $year  ||= $self->year;
+  Date_DayOfWeek($month, $day, $year) % 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 $date = DateCalc(
+    sprintf("%04d%02d%02d", $year, $month, $day),
+    "$delta days"
+  );
+  my($y, $m, $d) = $date =~ /^(\d{4})(\d\d)(\d\d)/;
+  $_ += 0 foreach ($y, $m, $d);
+  ($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 = UnixDate(sprintf("%04d%02d%02d", $year, $month, $day), '%U');
+  $week += 0;
+  ($year, $week);
+}
+
+1;