Bug->Doc #52015 [Opn->Ver]: Ending date is ignored while iterating DatePeriod

From: Date: Thu, 02 Apr 2020 09:13:29 +0000
Subject: Bug->Doc #52015 [Opn->Ver]: Ending date is ignored while iterating DatePeriod
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-17458@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=52015&edit=1

 ID:                 52015
 Updated by:         cmb@php.net
 Reported by:        ko dot fivestar at gmail dot com
 Summary:            Ending date is ignored while iterating DatePeriod
-Status:             Open
+Status:             Verified
-Type:               Bug
+Type:               Documentation Problem
 Package:            Date/time related
 Operating System:   Ubuntu 10.04
 PHP Version:        5.3.2
 Block user comment: N
 Private report:     N

 New Comment:

I can't assess what would be the proper behavior, given that
DatePeriod appears to be quirky in this regard[1], but at the very
least the current behavior should be documented.

[1] <https://3v4l.org/1kYQI>


Previous Comments:
------------------------------------------------------------------------
[2016-01-22 12:57:15] aivaras at voveris dot eu

Exactly same issue as described by ko dot fivestar at gmail dot com happens on OSX PHP v5.6.11

php -v
PHP 5.6.11 (cli) (built: Jul 10 2015 22:36:04) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
    with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans

Is there any estimate on when this is going to be resolved?

------------------------------------------------------------------------
[2014-01-29 11:38:12] boogerlad at gmail dot com

Now that this option exists, how would you use both DatePeriod::EXCLUDE_START_DATE and
DatePeriod::INCLUDE_END_DATE?

------------------------------------------------------------------------
[2010-06-07 16:03:49] degeberg@php.net

The following patch has been added/updated:

Patch Name: php_bug52015.diff
Revision:   1275919428
URL:        http://bugs.php.net/patch-display.php?bug=52015&patch=php_bug52015.diff&revision=1275919428

------------------------------------------------------------------------
[2010-06-07 16:03:44] degeberg@php.net

Whether or not it's a bug is debatable. It could be considered a half-open interval (which
would then make it a documentation issue).

Changing it to a closed interval would break backwards compatibility. It would probably be better
adding one more option to DatePeriod that allows the inclusion of the end date. The attached patch
implements that.

------------------------------------------------------------------------
[2010-06-07 13:56:17] ko dot fivestar at gmail dot com

Description:
------------
When passing DateTime objects to first and third argument of DatePeriod constructor, the specified
date on the third argument is not being interated when both DateTime object contains same time
value.

After looking through ext/date/php_date.c, date_period_it_has_more() function (line 1831) had
following code:

---------------
return object->start->sse < object->end->sse ? SUCCESS : FAILURE;
---------------

While the operator "<" is currently used to compare values, operator "<="
is more appropriate for this content.

Test script:
---------------
$period = new \DatePeriod(
    new \DateTime('2010-06-01'),
    new \DateInterval('P1D'),
    new \DateTime('2010-06-03')
);

foreach ($period as $day) {
    echo $day->format('Y-m-d') . "\n";
}


Expected result:
----------------
2010-06-01
2010-06-02
2010-06-03

Actual result:
--------------
2010-06-01
2010-06-02


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=52015&edit=1


Thread (5 messages)

« previous php.doc.bugs (#17458) next »