Re: Strange Result of Datetime::diff

From: Date: Thu, 06 Apr 2017 20:18:04 +0000
Subject: Re: Strange Result of Datetime::diff
References: 1 2 3  Groups: php.general 
Request: Send a blank email to php-general+get-326061@lists.php.net to get a copy of this message
03.04.2017 18:44, Christoph M. Becker пишет:
On 03.04.2017 at 15:28, Aziz Saleh wrote:
On Mon, Apr 3, 2017 at 8:39 AM, <naitsirch@e.mail.de> wrote:
I'd expect the following script: <?php $date1 = new DateTime('2017-03-01'); $date2 = new DateTime('2017-04-02'); $diff = $date1->diff($date2); echo "{$diff->m} months and {$diff->d} days."; ?> would print "1 months and 0 days.". But instead it prints "1 months and 3 days." (see https://3v4l.org/RMuUZ). What is the reason for this behaviour?
You sure about that, the above should yield 1 months and 1 days since you have an extra day there: http://sandbox.onlinephpfunctions.com/code/fe7c7d989101ab5e1dd1530d457bfcc7a1cfa8fa
But see <https://3v4l.org/N5fg7>! Please, read this: <https://bugs.php.net/bug.php?id=52480>.
DateTime::diff works with UTC timezone. So, it converts current DateTime object to UTC timezone. If you want to understand how it calculated, do $date1->setTimeZone(new DateTimeZone('UTC')); $date2->setTimeZone(new DateTimeZone('UTC')); and watch what actual values are used in diff. One of the ways to calculate difference is to use timezone UTC for DateTime object $date1 = new DateTime('2017-03-01', new DateTimeZone('UTC')); It calculates difference without time shifts and DTS rules.

« previous php.general (#326061) next »