|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2016-05-19 18:15 UTC] Rican7 at gmail dot com
[2016-05-19 18:16 UTC] Rican7 at gmail dot com
[2017-03-29 19:50 UTC] php-bugs at allenjb dot me dot uk
[2017-03-30 05:26 UTC] heiglandreas@php.net
-Status: Open
+Status: Closed
-Assigned To:
+Assigned To: heiglandreas
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 06:00:01 2025 UTC |
Description: ------------ DateTime instances are supposed to be natively "comparable" (using `==`, `>`, `<`, etc). Unfortunately, a colleague and I just noticed that if a Time Zone is updated on a compared instance, than the comparison fails... but only if the time zone isn't an IANA identifier. Really strange. What's worse, is that it seems to "magically" start to work again if a (seemingly idempotent) `getTimestamp()` call is made on the instance that had the new time-zone applied. Is this due to a lazy calculation of the internal timestamp that isn't getting validated when a new time zone is applied? Test script: --------------- <?php $datetime = new DateTime(null, new DateTimeZone('UTC')); $datetime_2 = clone $datetime; $datetime_2->add(new DateInterval('PT2S')); var_dump($datetime < $datetime_2); var_dump($datetime->getTimestamp() < $datetime_2->getTimestamp()); $datetime_2->setTimezone(new DateTimeZone('EST')); var_dump($datetime < $datetime_2); var_dump($datetime->getTimestamp() < $datetime_2->getTimestamp()); // Now that `getTimestamp()` has been called, it'll "magically" work... var_dump($datetime < $datetime_2); Expected result: ---------------- bool(true) bool(true) bool(true) bool(true) bool(true) Actual result: -------------- bool(true) bool(true) bool(false) bool(true) bool(true)