Issue #3156878 by alexpott, andypost: \Drupal\Component\Datetime\DateTimePlus should pass correct parameter types to checkdate()
parent
50e0c6f2b4
commit
dc21aa7c12
|
@ -624,11 +624,10 @@ class DateTimePlus {
|
||||||
$valid_date = FALSE;
|
$valid_date = FALSE;
|
||||||
$valid_time = TRUE;
|
$valid_time = TRUE;
|
||||||
// Check for a valid date using checkdate(). Only values that
|
// Check for a valid date using checkdate(). Only values that
|
||||||
// meet that test are valid.
|
// meet that test are valid. An empty value, either a string or a 0, is not
|
||||||
if (array_key_exists('year', $array) && array_key_exists('month', $array) && array_key_exists('day', $array)) {
|
// a valid value.
|
||||||
if (@checkdate($array['month'], $array['day'], $array['year'])) {
|
if (!empty($array['year']) && !empty($array['month']) && !empty($array['day'])) {
|
||||||
$valid_date = TRUE;
|
$valid_date = checkdate($array['month'], $array['day'], $array['year']);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// Testing for valid time is reversed. Missing time is OK,
|
// Testing for valid time is reversed. Missing time is OK,
|
||||||
// but incorrect values are not.
|
// but incorrect values are not.
|
||||||
|
|
|
@ -112,6 +112,23 @@ class DateTimePlusTest extends TestCase {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests DateTimePlus::checkArray().
|
||||||
|
*
|
||||||
|
* @param mixed $array
|
||||||
|
* Input argument for DateTimePlus::checkArray().
|
||||||
|
* @param bool $expected
|
||||||
|
* The expected result of DateTimePlus::checkArray().
|
||||||
|
*
|
||||||
|
* @dataProvider providerTestCheckArray
|
||||||
|
*/
|
||||||
|
public function testCheckArray(array $array, $expected) {
|
||||||
|
$this->assertSame(
|
||||||
|
$expected,
|
||||||
|
DateTimePlus::checkArray($array)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test creating dates from timestamps, and manipulating timezones.
|
* Test creating dates from timestamps, and manipulating timezones.
|
||||||
*
|
*
|
||||||
|
@ -442,6 +459,30 @@ class DateTimePlusTest extends TestCase {
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data provider for testCheckArray.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
* An array of arrays, each containing:
|
||||||
|
* - 'array' - Input for DateTimePlus::checkArray().
|
||||||
|
* - 'expected' - Expected output for DateTimePlus::checkArray().
|
||||||
|
*
|
||||||
|
* @see testCheckArray
|
||||||
|
*/
|
||||||
|
public function providerTestCheckArray() {
|
||||||
|
return [
|
||||||
|
'Date array, date only' => [['year' => 2010, 'month' => 2, 'day' => 28], TRUE],
|
||||||
|
'Date array with hour' => [['year' => 2010, 'month' => 2, 'day' => 28, 'hour' => 10], TRUE],
|
||||||
|
'One year larger than the documented upper limit of checkdate()' => [['year' => 32768, 'month' => 1, 'day' => 8, 'hour' => 8, 'minute' => 0, 'second' => 0], FALSE],
|
||||||
|
'One year smaller than the documented lower limit of checkdate()' => [['year' => 0, 'month' => 1, 'day' => 8, 'hour' => 8, 'minute' => 0, 'second' => 0], FALSE],
|
||||||
|
'Invalid month from date array' => [['year' => 2010, 'month' => 27, 'day' => 8, 'hour' => 8, 'minute' => 0, 'second' => 0], FALSE],
|
||||||
|
'Invalid hour from date array' => [['year' => 2010, 'month' => 2, 'day' => 28, 'hour' => 80, 'minute' => 0, 'second' => 0], FALSE],
|
||||||
|
'Invalid minute from date array.' => [['year' => 2010, 'month' => 7, 'day' => 8, 'hour' => 8, 'minute' => 88, 'second' => 0], FALSE],
|
||||||
|
'Missing day' => [['year' => 2059, 'month' => 1, 'second' => 1], FALSE],
|
||||||
|
'Zero day' => [['year' => 2059, 'month' => 1, 'day' => 0], FALSE],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides data for testDateTimezone.
|
* Provides data for testDateTimezone.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue