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 )