Convert DateInterval object to seconds in php

后端 未结 3 937
时光取名叫无心
时光取名叫无心 2021-02-05 08:23
$datetime1 = date_create(\'2009-10-11\');
$datetime2 = date_create(\'2009-10-13\');
$interval = date_diff($datetime1, $datetime2);

How do i convert the

相关标签:
3条回答
  • 2021-02-05 09:05

    There is a function format for this. But it wont return the number of seconds. To get number of seconds you use this technique

    $seconds = abs($datetime1->getTimestamp()-$datetime2->getTimestamp());
    

    If you really want to use $interval you need to calculate it.

    $seconds = $interval->days*86400 + $interval->h*3600 
               + $interval->i*60 + $interval->s;
    

    Here

    • 86400 is the number of seconds in a day
    • 3600 is the number of seconds in an hour
    • 60 is the number of seconds in a minute
    0 讨论(0)
  • 2021-02-05 09:11

    I would only add to shiplu's answer:

    function dateIntervalToSeconds($interval)
    {
        $seconds = $interval->days*86400 + $interval->h*3600 
           + $interval->i*60 + $interval->s;
        return $interval->invert == 1 ? $seconds*(-1) : $seconds;
    }
    

    To handle negative intervals.

    Note that - contrary to Brilliand's answer - The code above will consider correctly years, months and dates. Because $interval->days is an absolute value ($interval->d is relative to the month).

    EDIT: this function is still not correct, as pointed out by @Brilliand. A counter-example is

    new DateInterval('P4M3DT2H'); 
    

    It doesn't handle months well.

    0 讨论(0)
  • 2021-02-05 09:20

    Another way to get the number of seconds in an interval is to add it to the zero date, and get the timestamp of that date:

    $seconds = date_create('@0')->add($interval)->getTimestamp();
    

    This method will handle intervals created via the DateInterval contructor more or less correctly, whereas shiplu's answer will ignore years, months and days for such intervals. However, shiplu's answer is more accurate for intervals that were created by subtracting two dates. For intervals consisting only of hours, minutes and seconds, both methods will get the correct answer.

    0 讨论(0)
提交回复
热议问题