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

From: Date: Tue, 12 Feb 2019 20:24:05 +0000
Subject: Bug #77571 [Com]: 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-219538@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
 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


Thread (11 messages)

« previous php.bugs (#219538) next »