Web lists-archives.com

Re: [PHP] Strange Result of Datetime::diff




Am 03-Apr-2017 18:22:16 +0200 schrieb tularis@xxxxxxx: 
> On 3-4-2017 17:36, Ryan Pallas wrote:
> > On Apr 3, 2017 9:29 AM, <naitsirch@xxxxxxxxx> wrote:
> >
> > Am 03-Apr-2017 15:28:44 +0200 schrieb azizsaleh@xxxxxxxxx:
> >>
> >> On Mon, Apr 3, 2017 at 8:39 AM, <naitsirch@xxxxxxxxx> wrote:
> >>> Hi,
> >>>
> >>> 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?
> >>>
> >>> Thanks in advance and best regards
> >>> Christian
> >>> ------------------------------------------------------------
> > -------------------------------------
> >>> FreeMail powered by mail.de - MEHR SICHERHEIT, SERIOSITÄT UND KOMFORT
> >>>
> >>> --
> >>> PHP General Mailing List (http://www.php.net/)
> >>> To unsubscribe, visit: http://www.php.net/unsub.php
> >>>
> >>
> >> 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/fe7c7d989101ab5e1dd1530d457bfc
> > c7a1cfa8fa
> >>
> >> If it was:
> >>
> >> $date1 = new DateTime('2017-03-01');
> >> $date2 = new DateTime('2017-04-01');
> >>
> >> Then it would be exactly 1 month.
> >>
> >
> > Aaw, of course you are right. I changed the code for another test and
> > forgot to revert the change when I copied it into the mail.
> >
> > So it seems like there is a bug. But what makes me wonder is that HHVM
> > prints out the same result. That's why I wanted to ask this mailing list as
> > I assume that I am missing something :-/
> >
> > Does anyone have an idea?
> >
> >
> > What time zone are you using? The difference may be related to daylight
> > savings/summer time as that changed in that specific period.
> >
> >
> > Best regards
> > Christian
> > ------------------------------------------------------------
> > -------------------------------------
> > FreeMail powered by mail.de - MEHR SICHERHEIT, SERIOSITÄT UND KOMFORT
> >
> > --
> > PHP General Mailing List (http://www.php.net/)
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
> 
> I've had a bit of a test, and I believe it has to do with timezone handling.
> 
> I tested it by moving the dates 1 day forward (march 2nd till april 
> 2nd), and then suddenly it changes back to a difference of 1 month and 0 
> days.
> 
> Let's assume we use current timezones; I'm in CET, so let's assume that 
> as the local timezone.
> 
> We input the following times:
> 2017-03-01 00:00:00 CET (UTC+1)
> 2017-04-01 00:00:00 CEST (UTC+2)
> 
> Converting the dates back to UTC times would yield:
> 2017-02-28 23:00:00 UTC
> 2017-03-31 22:00:00 UTC
> 
> So, we would now see a difference of 1 month and 3 days, which is given 
> as the answer by the diff function.
> 
> In other words, it seems to have to do with Timezone handling. If you 
> set the default timezone to UTC, the effect we see wil disappear.
> 
> Proof: https://3v4l.org/uoioc
> 

Hi Maciek,

you are right. that helps me. Thanks a lot.

Christian
-------------------------------------------------------------------------------------------------
FreeMail powered by mail.de - MEHR SICHERHEIT, SERIOSITÄT UND KOMFORT

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php