2014-12-03 2 views
1

так, я вычитаем две даты:Как преобразовать Php :: DateInterval в секунды?

$d = $start->diff($end); 

и теперь я хочу, чтобы получить дату в секундах (не параметр second). Я знаю, что это можно сделать с помощью родной функции Php, но это работает только в 1970 году. Я знаю, что мне нужно как-то работать с методом format(), но я не получаю его ...

+0

Использовать формат method.' $ d-> format ('s'); '. Я на мобильный, я не могу проверить это, но если это не работает, я могу исправить за несколько часов. –

+0

php timestamps подписаны ints. 32-битная метка времени будет делать 1902-> 2038, фактически. –

+1

@BenjaminPoignant: он просто возвращает 's' :) –

ответ

4

Вы можете получить доступ к public properties of the DateInterval class и сделать несколько математика на нем:

$seconds = $d->s + ($d->i * 60) + ($d->h * 3600) + ($d->d * 86400) + ($d->m * 2592000); // and so on 

, но как только мы получим в ближайшие месяцы будет отклонение на +/- 2 дней, если не придерживаться произвольного определения месяца как 2592000 secs (30 дней).

Вы также можете использовать разность двух временных меток UNIX от объектов DateTime (но вы будете в конечном итоге возникают проблемы с даты составляет менее 1970 году):

$seconds = $end->getTimestamp() - $start->getTimestamp(); 
+0

Будет ли решение +/- 2, если вы получите общее количество дней, а не месяцев? – cepradeep

+0

thx, Ive просто нашел это здесь: https://www.liketly.com/forum/thread/12020/calculate-absolute-abnormal-in-php-dateinterval/, но вы уверены, что «ручная» математика должна играть роль здесь? –

+1

@CEP Нет, потому что дни округляются до свойства 'm' – sjagr

2

Следующая похоже на работу , хотя я считаю, что должен быть лучший способ.

$dateIntrvl = $start->diff($end); 

$days = $dateIntrvl->format('%a'); 
$hours = $dateIntrvl->format('%h'); 
$mins = $dateIntrvl->format('%i'); 
$secs = $dateIntrvl->format('%s'); 

$totalSeconds = ($days * 24 * 60 * 60) + ($hours * 60 * 60) + ($mins * 60) + $secs; 

И да, это, кажется, работает для дат ранее 1970.

+0

thx, Ive просто нашел его здесь: https: // www.liketly.com/forum/thread/12020/calculate-absolute-abnormal-in-php-dateinterval/, но уверены ли вы, что «ручная» математика должна играть здесь роль? –

+0

Просьба уточнить _manual mathematic_. Вы хотите сказать, что человек должен делать это? – cepradeep

+0

Я имел в виду, разве это не реализовано Php? Время UNIX не должно быть преобразовано в формат Ymd либо вручную, либо –

Смежные вопросы