Search code examples
phpdatetimedst

How to subtract two dates, ignoring daylight savings time in PHP?


I'm trying to calculate the number of days between two days, but I'm running into issues with Daylight Savings Time. Here's my code:

function date_diff($old_date, $new_date) {
    $offset = strtotime($new_date) - strtotime($old_date);
    return $offset/60/60/24;
}

Works fine as long as the days are both within the same DST period:

echo date_diff('3/15/09', '3/18/09'); // 3

But not if they're further apart:

echo date_diff('11/15/08', '3/18/09'); // 122.95833333333

I want an even number of days, and don't care about DST. I suppose I could round the result, but that feels kludgy. Is there a better (easy) way? I don't want to have to write a whole day-parsing-and-counting-avoiding-leap-years thing if I can avoid it.

(Note: this has to run under php 5.1.6, so some of the date features in 5.3 may not be available.)

A bit more info: I'm going to take the offset and add it to other datetimes that are in a db, and I want only the day part to change, not the time part. Turns out rounding won't work, anyway, because when I do the adding it gets off by one hour in the other direction. Maybe there's a better approach to the whole problem....


Solution

  • you could use https://www.php.net/date_default_timezone_set to set the timezone to GMT so there will be no offset.

    Alternately, you can manually add an offset using the date('I',$timetamp)

    if ( date("I") == 1 ) {      // "WE ARE MDT";  
            $timeZone = "MDT";  
    } else {  
            $timeZone = "MST";  
    }