Fix unit tests for DATEDIF()
Leap years where not properly taken into consideration
This commit is contained in:
parent
8061f7516e
commit
8c4c11346b
|
@ -729,13 +729,24 @@ class DateTime
|
||||||
case 'YD':
|
case 'YD':
|
||||||
$retVal = intval($difference);
|
$retVal = intval($difference);
|
||||||
if ($endYears > $startYears) {
|
if ($endYears > $startYears) {
|
||||||
while ($endYears > $startYears) {
|
$isLeapStartYear = $PHPStartDateObject->format('L');
|
||||||
|
$wasLeapEndYear = $PHPEndDateObject->format('L');
|
||||||
|
|
||||||
|
// Adjust end year to be as close as possible as start year
|
||||||
|
while ($PHPEndDateObject >= $PHPStartDateObject) {
|
||||||
$PHPEndDateObject->modify('-1 year');
|
$PHPEndDateObject->modify('-1 year');
|
||||||
$endYears = $PHPEndDateObject->format('Y');
|
$endYears = $PHPEndDateObject->format('Y');
|
||||||
}
|
}
|
||||||
$retVal = $PHPEndDateObject->format('z') - $PHPStartDateObject->format('z');
|
$PHPEndDateObject->modify('+1 year');
|
||||||
if ($retVal < 0) {
|
|
||||||
$retVal += 365;
|
// Get the result
|
||||||
|
$retVal = $PHPEndDateObject->diff($PHPStartDateObject)->days;
|
||||||
|
|
||||||
|
// Adjust for leap years cases
|
||||||
|
$isLeapEndYear = $PHPEndDateObject->format('L');
|
||||||
|
$limit = new \DateTime($PHPEndDateObject->format('Y-02-29'));
|
||||||
|
if (!$isLeapStartYear && !$wasLeapEndYear && $isLeapEndYear && $PHPEndDateObject >= $limit ) {
|
||||||
|
$retVal--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -416,12 +416,9 @@ class DateTimeTest extends \PHPUnit_Framework_TestCase
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider providerDATEDIF
|
* @dataProvider providerDATEDIF
|
||||||
* @group fail19
|
|
||||||
*/
|
*/
|
||||||
public function testDATEDIF()
|
public function testDATEDIF()
|
||||||
{
|
{
|
||||||
$this->markTestIncomplete('TODO: This test should be fixed');
|
|
||||||
|
|
||||||
$args = func_get_args();
|
$args = func_get_args();
|
||||||
$expectedResult = array_pop($args);
|
$expectedResult = array_pop($args);
|
||||||
$result = call_user_func_array([DateTime::class, 'DATEDIF'], $args);
|
$result = call_user_func_array([DateTime::class, 'DATEDIF'], $args);
|
||||||
|
|
|
@ -1,6 +1,36 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
[
|
||||||
|
'2016-01-01',
|
||||||
|
'2016-12-31',
|
||||||
|
'YD',
|
||||||
|
365
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'2015-01-01',
|
||||||
|
'2015-12-31',
|
||||||
|
'YD',
|
||||||
|
364
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'2015-01-01',
|
||||||
|
'2016-12-31',
|
||||||
|
'YD',
|
||||||
|
364
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'2016-01-01',
|
||||||
|
'2017-12-31',
|
||||||
|
'YD',
|
||||||
|
365
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'2017-01-01',
|
||||||
|
'2018-12-31',
|
||||||
|
'YD',
|
||||||
|
364
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'ABC',
|
'ABC',
|
||||||
'2007-1-10',
|
'2007-1-10',
|
||||||
|
|
Loading…
Reference in New Issue