[php-src] Issue #13341: Wrong result from DateTimeImmutable::diff

From: Date: Tue, 06 Feb 2024 19:45:05 +0000
Subject: [php-src] Issue #13341: Wrong result from DateTimeImmutable::diff
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-246421@lists.php.net to get a copy of this message
Issue: https://github.com/php/php-src/issues/13341 Author: ryan-hoppe ### Description If you run execute this code, it produces an extremely weird result. The first DTI is 11 minutes after what we’re ->diff() ’ing against, but when in the local America/Los_Angeles TZ, it produces a very strange result. Converting the first DTI to UTC then produces the expected difference of 11 minutes. ```php //Difference of -1 year, 11 months, 31 days, etc. <?php $invalid_result = (new \DateTimeImmutable('2024-01-31 17:00:00', new \DateTimeZone('America/Los_Angeles'))) ->diff(new \DateTimeImmutable('2024-02-01 00:49:00')); //Difference of 11 minutes $correct_result = (new \DateTimeImmutable('2024-01-31 17:00:00', new \DateTimeZone('America/Los_Angeles'))) ->setTimezone(new \DateTimeZone('UTC')) ->diff(new \DateTimeImmutable('2024-02-01 00:49:00')); var_dump($invalid_result); var_dump($correct_result); ``` $invalid_result Resulted in this output: ``` object(DateInterval)#3 (10) { ["y"]=> int(-1) ["m"]=> int(11) ["d"]=> int(31) ["h"]=> int(0) ["i"]=> int(11) ["s"]=> int(0) ["f"]=> float(0) ["invert"]=> int(1) ["days"]=> int(0) ["from_string"]=> bool(false) } ``` But I expected this output instead: ``` object(DateInterval)#2 (10) { ["y"]=> int(0) ["m"]=> int(0) ["d"]=> int(0) ["h"]=> int(0) ["i"]=> int(11) ["s"]=> int(0) ["f"]=> float(0) ["invert"]=> int(1) ["days"]=> int(0) ["from_string"]=> bool(false) } ``` ### PHP Version PHP 8.1 ### Operating System _No response_

« previous php.bugs (#246421) next »