|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2014-04-06 12:16 UTC] 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) PatchesPull Requests
Pull requests:
HistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 07:00:01 2025 UTC |
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)