Edit report at https://bugs.php.net/bug.php?id=77571&edit=1
ID: 77571
Comment by: techouse at gmail dot com
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
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:
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
Previous Comments:
------------------------------------------------------------------------
[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
------------------------------------------------------------------------
[2019-02-07 01:19:40] a at b dot c dot de
May also be related to bug #76374
------------------------------------------------------------------------
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