Bug #77571 [Opn->Csd]: DateTime's diff DateInterval incorrect in timezones from UTC+01:00 to UTC+12:00
| From: | derick@php.net | 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