Bug #77571 [Opn->Csd]: DateTime's diff DateInterval incorrect in timezones from UTC+01:00 to UTC+12:00

From: Date: Tue, 06 Apr 2021 19:55:49 +0000
Subject: Bug #77571 [Opn->Csd]: DateTime's diff DateInterval incorrect in timezones from UTC+01:00 to UTC+12:00
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-233263@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=77571&edit=1 ID: 77571 Updated by: derick@php.net Reported by: techouse at gmail dot com Summary: DateTime's diff DateInterval incorrect in timezones from UTC+01:00 to UTC+12:00 -Status: Open +Status: Closed Type: Bug Package: Date/time related Operating System: macOS 10.14.3, Ubuntu 18.04 PHP Version: 7.3.1, 7.2.10 -Assigned To: +Assigned To: derick Block user comment: N Private report: N New Comment: The fix for this bug has been committed. If you are still experiencing this bug, try to check out latest source from https://github.com/php/php-src and re-test. Thank you for the report, and for helping us make PHP better. Fixed for PHP 8.1. Previous Comments: ------------------------------------------------------------------------ [2019-02-12 20:24:05] techouse at gmail dot com Yes, but that makes a negative diff which is not what I want. Basically in order to get a correct date I would have to subtract a negative interval instead of adding a positive one?! How crazy of an idea is that?? https://3v4l.org/2MNE3 ------------------------------------------------------------------------ [2019-02-12 18:40:26] cmb@php.net It seems to me that boils down to the question: “how many days does a month have?” Answer: it depends. For instance, May has 31 days, so 31 days + 4 days = 35 days. Correct. If you revert the ::diff()[1], you see that April has 30 days, so 30 days + 5 days = 35 days. Correct again. [1] <https://3v4l.org/gocOc> ------------------------------------------------------------------------ [2019-02-12 14:57:33] techouse at gmail dot com My work colleague found out that this feature worked correctly in PHP 5.3.0, 5.3.1 and 5.3.2, however in 5.3.3 we can already observe this bug in action. Check for yourself https://3v4l.org/cupQV ------------------------------------------------------------------------ [2019-02-12 14:56:32] techouse at gmail dot com Changed the title to have more meaning ------------------------------------------------------------------------ [2019-02-07 08:44:40] techouse at gmail dot com I simply copied this test https://github.com/php/php-src/blob/master/ext/date/tests/DateInterval_format.phpt and changed the timezone from UTC to Europe/Paris and the test fails. --TEST-- DateInterval::format() with timezone, except %a --DESCRIPTION-- %a is covered in a separate test. Don't want an XFAIL here to cause confusion if a real bug comes up. --CREDITS-- Daniel Convissor <danielc@php.net> # TestFest 2010 BKTK --SKIPIF-- <?php if (!method_exists('DateInterval', 'format')) die("skip: method doesn't exist"); ?> --FILE-- <?php //date_default_timezone_set('UTC'); date_default_timezone_set('Europe/Paris'); $date1 = new DateTime('2000-01-01 00:00:00'); $date2 = new DateTime('2001-03-04 04:05:06'); $interval = $date1->diff($date2); echo $interval->format('Y=%Y') . "\n"; echo $interval->format('M=%M') . "\n"; echo $interval->format('D=%D') . "\n"; echo $interval->format('H=%H') . "\n"; echo $interval->format('I=%I') . "\n"; echo $interval->format('S=%S') . "\n"; echo $interval->format('R=%R') . "\n"; echo $interval->format('y=%y') . "\n"; echo $interval->format('m=%m') . "\n"; echo $interval->format('d=%d') . "\n"; echo $interval->format('h=%h') . "\n"; echo $interval->format('i=%i') . "\n"; echo $interval->format('s=%s') . "\n"; echo $interval->format('r=%r') . "\n"; echo "\n"; $interval = $date2->diff($date1); echo $interval->format('inverted R=%R') . "\n"; echo $interval->format('inverted r=%r') . "\n"; echo "\n"; echo $interval->format('%=%%') . "\n"; // Invalid valid format character does not raise warnings. echo $interval->format('x=%x') . "\n"; ?> --EXPECT-- Y=01 M=02 D=03 H=04 I=05 S=06 R=+ y=1 m=2 d=3 h=4 i=5 s=6 r= inverted R=- inverted r=- %=% x=%x ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=77571 -- Edit this bug report at https://bugs.php.net/bug.php?id=77571&edit=1

« previous php.bugs (#233263) next »