Search code examples
phpdatediff

wrong count on php date_diff


I'm doing a date-diff on 2015-03-01 and 2017-01-31 (using php7.2) and it returns 1 year, 11 months and 2 days. But it should (obviously) be either 11 months and 0 days or 10 months and 30 days.

Why is that? Please don't tell me, that php is dividing by 30 or something - I don't need a calendar-function if it is less reliable than a manual solution!.. that would be just crazy, right?

$diff = date_create('2015-03-01')->diff(date_create('2017-01-31'));
// returns
DateInterval Object
(
    [y] => 1
    [m] => 11
    [d] => 2
    [h] => 0
    [i] => 0
    [s] => 0
    [weekday] => 0
    [weekday_behavior] => 0
    [first_last_day_of] => 0
    [invert] => 0
    [days] => 702
    [special_type] => 0
    [special_amount] => 0
    [have_weekday_relative] => 0
    [have_special_relative] => 0
)
// and that's simply just wrong

UPDATE it works when switching the timezone from 'Europe/Berlin' to 'UTC'

date_default_timezone_set('UTC');

but yeah, 'Europe/Berlin' should actually work, too...


Solution

  • it's just a bug. known, old, never solved. at least it was re-opened in 2017...

    PHP DateTime Timedifference only correct in UTC Timezone?