improved LeapYear validator

This commit is contained in:
Jayson Reis 2011-10-17 22:44:55 -02:00 committed by Jayson Reis
parent 475937e66e
commit 82846a4347
2 changed files with 15 additions and 5 deletions

View file

@ -8,13 +8,21 @@ class LeapYear extends AbstractRule
{
public function validate($year)
{
if (is_string($year)) {
$year = (int) $year;
} else if ($year instanceof DateTime) {
if (is_string($year))
if (is_numeric($year))
$year = (int) $year;
else {
try {
$date = new DateTime($year);
$year = (int) $date->format('Y');
} catch (Exception $e) {
return false;
}
}
elseif ($year instanceof DateTime)
$year = (int) $year->format('Y');
} else if (!is_integer($year)) {
elseif (!is_integer($year))
return false;
}
$date = strtotime(sprintf('%d-02-29', $year));
return (bool) date('L', $date);

View file

@ -17,6 +17,7 @@ class LeapYearTest extends \PHPUnit_Framework_TestCase
public function test_valid_leap_date()
{
$this->assertTrue($this->leapYearValidator->validate('2008'));
$this->assertTrue($this->leapYearValidator->validate('2008-02-29'));
$this->assertTrue($this->leapYearValidator->validate(2008));
$this->assertTrue($this->leapYearValidator->validate(
new DateTime('2008-02-29')));
@ -25,6 +26,7 @@ class LeapYearTest extends \PHPUnit_Framework_TestCase
public function test_invalid_leap_date()
{
$this->assertFalse($this->leapYearValidator->validate('2009'));
$this->assertFalse($this->leapYearValidator->validate('2009-02-29'));
$this->assertFalse($this->leapYearValidator->validate(2009));
$this->assertFalse($this->leapYearValidator->validate(
new DateTime('2009-02-29')));