use DateTime::Duration to correctly convert partial dates in to fields
[BackupPC.git] / lib / BackupPC / Search.pm
index 2fd2f98..70f084b 100644 (file)
@@ -79,31 +79,28 @@ sub dates_from_form($) {
        sub mk_epoch_date($$) {
                my ($name,$suffix) = @_;
 
-               my $yyyy = $param->{ $name . '_year_' . $suffix} || return undef;
-               my $mm .= $param->{ $name . '_month_' . $suffix} ||
-                       ( $suffix eq 'from' ? 1 : 12);
-               my $dd .= $param->{ $name . '_day_' . $suffix} ||
-                       ( $suffix eq 'from' ? 1 : 31);
+               my $yyyy = $param->{ $name . '_year_'  . $suffix}  || return undef;
+               my $mm   = $param->{ $name . '_month_' . $suffix};
+               my $dd   = $param->{ $name . '_day_'   . $suffix};
 
                $yyyy =~ s/\D//g;
-               $mm =~ s/\D//g;
-               $dd =~ s/\D//g;
-
-               my $h = my $m = my $s = 0;
-               if ($suffix eq 'to') {
-                       $h = 23;
-                       $m = 59;
-                       $s = 59;
-               }
+               $mm   =~ s/\D//g;
+               $dd   =~ s/\D//g;
 
                my $dt = new DateTime(
-                       year => $yyyy,
-                       month => $mm,
-                       day => $dd,
-                       hour => $h,
-                       minute => $m,
-                       second => $s,
+                       year   => $yyyy,
+                       month  => $mm || 1,
+                       day    => $dd || 1,
+                       hour   => 0,
+                       minute => 0,
+                       second => 0,
                );
+               if ( $suffix eq 'to' && ( ! $mm || ! $dd ) ) {
+                       $dt += DateTime::Duration->new( years  => 1 ) if ! $mm;
+                       $dt += DateTime::Duration->new( months => 1 ) if ! $dd;
+                       $dt -= DateTime::Duration->new( days   => 1 );
+               }
+
                print STDERR "mk_epoch_date($name,$suffix) [$yyyy-$mm-$dd] = " . $dt->ymd . " " . $dt->hms . "\n";
                return $dt->epoch || 'NULL';
        }