[prev] [thread] [next] [lurker] [Date index for 2005/02/14]
Author: simon Date: 2005-02-14 10:39:30 +0000 (Mon, 14 Feb 2005) New Revision: 1875 Modified: trunk/buscador/lib/Buscador/Date.pm Log: Make dates more 'intuitive' i.e try and DTRT wherever possible Modified: trunk/buscador/lib/Buscador/Date.pm =================================================================== --- trunk/buscador/lib/Buscador/Date.pm 2005-02-14 10:39:11 UTC (rev 1874) +++ trunk/buscador/lib/Buscador/Date.pm 2005-02-14 10:39:30 UTC (rev 1875) @@ -71,7 +71,11 @@ my $deftime = localtime; my $time; - my $s = sprintf "%.4d-%.2d-%.2d", $objects[0], $objects[1], $objects[2]; + my $year = fix_year($objects[0]); + my $month = fix_month($objects[1]); + my $day = $objects[2]; + + my $s = sprintf "%.4d-%.2d-%.2d", $year, $month, $day; eval { $time = Time::Piece->strptime($s, "%Y-%m-%d"); }; @@ -92,8 +96,11 @@ sub month { my ($self,$r, @objects) = @_; - my $year = $objects[0]; - my $month = $objects[1]; + my $year = fix_year($objects[0]); return 0 unless defined $year; + my $month = fix_month($objects[1]); return 0 unless defined $month; + + + my $s = sprintf "%.4d-%.2d-%.2d", $year, $month, 15; my $date = Time::Piece->strptime($s, "%Y-%m-%d"); @@ -122,9 +129,13 @@ my @months; - my $year = $objects[0]; + my $year = fix_year($objects[0]); + return 0 unless defined $year; + + + for my $m (1..12) { $months[ $m - 1 ] = scalar Email::Store::Date->search( year => $year, month => $m ); } @@ -139,6 +150,35 @@ return 1; } +sub fix_year { + my $year = shift; return unless $year =~ /^\d+$/; + $year += 0; # force numerical + my @lt = localtime(); + my $cur = sprintf("%02d", $lt[5] % 100) + 0; + my $millenia = $lt[5] + 1900; $millenia -= $millenia % 1000; + + return $millenia + $year if ($year <= $cur); + return ($millenia - 1000) + $year if ($year < 100); + return $year; +} + + +sub fix_month { + my $month = shift; + if ($month =~ /^\d+/) { + return undef if $month > 12 || $month < 1; + return $month; + } + $month = lc(substr $month,0,3); + my %months; my $counter = 1; + for (qw(jan feb mar apr may jun jul aug sep oct nov dec)) { + $months{$_} = $counter++; + } + + return $months{$month}; + +} + use Class::DBI::Pager; sub do_pager { my ($self, $r) = @_;
Generated at 11:00 on 14 Feb 2005 by mariachi 0.52