Doc #67034 [PATCH]: Unable to compare DateInterval instances with == operator

[email protected] ("[email protected]") Fri, 20 May 2022 16:12:04 +0000
Newsgroups php.doc.bugs
Message-ID <[email protected]>
Edit report at https://bugs.php.net/bug.php?id=67034&edit=1

 ID:                 67034
 Patch added by:     [email protected]
 Reported by:        from dot php dot net at brainbox dot cz
 Summary:            Unable to compare DateInterval instances with ==
                     operator
 Status:             Verified
 Type:               Documentation Problem
 Package:            Date/time related
 PHP Version:        5.6.0alpha3
 Assigned To:        cmb
 Block user comment: N
 Private report:     N

 New Comment:

The following pull request has been associated:

Patch Name: Fix bug 67034: Unable to compare DateInterval instances with == operator
On GitHub:  https://github.com/php/doc-en/pull/1590
Patch:      https://github.com/php/doc-en/pull/1590.patch


Previous Comments:
------------------------------------------------------------------------
[2022-05-13 14:18:19] [email protected]

Where would we document this CMB?

------------------------------------------------------------------------
[2021-02-26 21:50:51] [email protected]

DatePeriod comparision are explicitly disallowed (and as such
return false) as of PHP 7.4.0, for the reasons outlined above.
This is apparently not yet documented, though.

------------------------------------------------------------------------
[2014-12-08 17:30:47] mfaust at usinternet dot com

Comparisons of DatePeriod really ins't feasible without knowing a start date. For example 'P1M' and 'P30D' are equal (==) for some months, but not others. The == comparison is possible for time-only date periods but for anything involving dates you can't make a reliable assumption. My recommendation is to return TRUE when all the parts patch exactly (eg 'PT60S' == 'PT60S' but 'PT1M' != 'PT60S') just to make the behavior consistent if a date portion is involved. 

If you want a true comparison then do something like this:

$now = new DateTimeImmutable();
if($now->addInterval($intervalA) == $now->addInterval($intervalB)){...

(note that DateTimeImmutable will return a new object for each instead of modifying $now)

------------------------------------------------------------------------
[2014-04-06 12:16:53] from dot php dot net at brainbox dot cz

Description:
------------
I am unable to compare DatePeriod timezones with equality operator. The operator always returns true regardless the DatePeriod value.

Result can be seen here: http://3v4l.org/b8AAS

Test script:
---------------
// different
var_dump(new DateInterval('PT1S') == new DateInterval('PT2S'));
// same
var_dump(new DateInterval('PT1S') == new DateInterval('PT1S'));

Expected result:
----------------
bool(false)
bool(true)

Actual result:
--------------
bool(true)
bool(true)


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



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