Bug #77571 [Opn]: DateInterval has incorrect interval using timezones from UTC+01:00 to UTC+12:00
| From: | techouse at gmail dot com | 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