$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
How do i convert the above $interval
to seconds in php
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
How do i convert the above $interval
to seconds in php
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.
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 day3600
is the number of seconds in an hour60
is the number of seconds in a minute$interval->days
may be a boolean. This would be safer by using $interval->y
, $interval->m
, and $interval->d
instead of $interval->days
. The immediate problem you'll face is deciding how many days to use in a month. @Brilliand's answer fixes this, but has its own limitations as well. Choose wisely.
Commented
Jan 31, 2023 at 5:44
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.
new DateInterval('P4M3DT2H')
. Try it and see - the days
variable is empty, despite the interval spanning roughly 123 days.
Commented
Dec 29, 2017 at 19:43
new DateInterval('P3D')
- the days
variable is still empty. A DateInterval created with new
just never fills in that variable. That's what I meant by "the DateInterval contructor".
Commented
Jan 4, 2018 at 22:43