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

From: Date: Tue, 12 Feb 2019 18:40:26 +0000
Subject: Bug #77571 [Opn]: 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-219536@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:         cmb@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
 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:

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>


Previous Comments:
------------------------------------------------------------------------
[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

------------------------------------------------------------------------
[2019-02-06 08:55:48] techouse at gmail dot com

Might be related to https://bugs.php.net/bug.php?id=52480

------------------------------------------------------------------------


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


Thread (11 messages)

« previous php.bugs (#219536) next »