Apache-Wyrd
view release on metacpan or search on metacpan
Wyrd/Interfaces/Dater.pm view on Meta::CPAN
Yesterday's date in eight digits.
=cut
sub _num_yesterday {
my ($self) = @_;
my ($year, $month, $day) = $self->_ymd_today;
($year, $month, $day) = Add_Delta_Days($year, $month, $day, -1);
return $self->_num_year($year, $month, $day);
}
=item _num_tomorrow
Tomorrow's date in eight digits.
=cut
sub _num_tomorrow {
my ($self) = @_;
my ($year, $month, $day) = $self->_ymd_today;
($year, $month, $day) = Add_Delta_Days($year, $month, $day, 1);
return $self->_num_year($year, $month, $day);
}
sub _ymd_today {
my ($self) = @_;
my @localtime = localtime;
$localtime[4]++;
return $localtime[5], $localtime[4], $localtime[3];
}
sub _ymd_year {
my ($self, $date) = @_;
$self->_raise_exception("_ymd_year requires an 8 digit argument")
unless(length($date) == 8);
my $y = substr($date, 0, 4) + 0;
my $m = substr($date, 4, 2) + 0;
my $d = substr($date, 6, 2) + 0;
return ($y, $m, $d);
}
=item _num_year
Interpret digital values for arguments y, m, d, and return an eight digit date.
=cut
sub _num_year {
my ($self, $year, $month, $day) = @_;
$year = $self->_normalize_year($year);
return substr('0000' . $year, -4) . substr('00' . $month, -2) . substr('00' . $day, -2);
}
sub _yy2yyyy {
my ($self, $year) = @_;
return $self->_normalize_year($year);
}
=item _normalize_year
Given a year in digits (2 or 4 are best), attempt a guess as to which year is
meant. Uses the simple 50-year window method for interpreting 2 digit
years. Used internally.
=cut
sub _normalize_year {
my ($self, $year) = @_;
if ($year >= 100 and $year < 199) {
#assume a perl localtime year
$year += 1900;
} elsif ($year =~ /^\d{4}$/) {
$self->_error("Year $year seems out of range") if ($year < 1900 or $year > 2100);
} elsif ($year > 0) {
my @localtime = localtime;
my $two_digit_year = substr($localtime[5], -2);
if ($two_digit_year > ($year + 50)) {
$year += 1900;
} else {
$year += 2000;
}
} else {
$self->_error("Couldn't make sense of this year: $year");
}
return $year;
}
=item _mmddyy2mysql
Turn an american-style six-digit year into one in mysql default format.
=cut
sub _mmddyy2mysql {
#For dates up to this year, assumes a past date
my ($self, $value) = @_;
my ($month, $day, $year) = split('/',$value);
$year = $self->_normalize_year($year);
return $self->_mysql_year($year, $month, $day);
}
=item _yyyy2mysql
Turn a four-digit year into one in mysql default format.
=cut
sub _yyyy2mysql {
my ($self, $year) = @_;
return $self->_mysql_year($year);
}
=item _mmddyy2mysql
Turn an american-style eight-digit year into one in mysql default format.
=cut
sub _mmddyyyy2mysql {
my ($self, $value) = @_;
my ($month, $day, $year) = split('/',$value);
( run in 2.065 seconds using v1.01-cache-2.11-cpan-0bb4e1dffa6 )