Bug #77571 [Opn]: DateInterval has incorrect interval using timezones from UTC+01:00 to UTC+12:00

From: Date: Thu, 07 Feb 2019 08:44:40 +0000
Subject: Bug #77571 [Opn]: DateInterval has incorrect interval using timezones from UTC+01:00 to UTC+12:00
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-219398@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 User updated by: techouse at gmail dot com Reported by: techouse at gmail dot com Summary: DateInterval has incorrect interval using timezones from UTC+01:00 to UTC+12:00 Status: Open Type: Bug Package: Date/time related Operating System: macOS 10.14.3, Ubuntu 18.04 PHP Version: 7.3.1, 7.2.10 Block user comment: N Private report: N New Comment: 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 Previous Comments: ------------------------------------------------------------------------ [2019-02-07 01:19:40] a at b dot c dot de May also be related to bug #76374 ------------------------------------------------------------------------ [2019-02-06 08:55:48] techouse at gmail dot com Might be related to https://bugs.php.net/bug.php?id=52480 ------------------------------------------------------------------------ [2019-02-06 08:22:05] techouse at gmail dot com Better summary ------------------------------------------------------------------------ [2019-02-06 08:20:45] techouse at gmail dot com Updated the summary to be more descriptive and added another tested PHP version. ------------------------------------------------------------------------ [2019-02-05 15:26:37] techouse at gmail dot com Description: ------------ Yesterday I observed a weird DateInterval bug where adding 5 weeks would always equal 35 days but the difference in months and days would not be correct. After some digging I figured out it was related to timezones and only affected timezones ranging from Europe/London eastward all the way to Pacific/Auckland, however as soon as I used Pacific/Honolulu the issue was gone. Test findings All the tests in tests/Timezones/America and tests/Timezones/Atlantic pass. Another weird thing is that Europe/London passes all tests where it does not adhere to daylight savings time (UTC+01:00). From this I draw a conclusion that all timezones that are greater than UTC+00:00 fail because of this additional time. All the tests and findings can be found in my GitHub repo https://github.com/techouse/php-date-interval-timezone-bug Test script: --------------- https://github.com/techouse/php-date-interval-timezone-bug Expected result: ---------------- A correct DateInterval. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=77571&edit=1

« previous php.bugs (#219398) next »