2009-10-05 18:11:08
2009-10-05 18:07:13
Это должно генерировать 235, как это сделать?
Вы можете использовать strtotime () для этого:
$diff = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13')
С объектами DateTime вы можете сделать это следующим образом:
$date = new DateTime( '2009-10-05 18:07:13' ); $date2 = new DateTime( '2009-10-05 18:11:08' ); $diffInSeconds = $date2->getTimestamp() - $date->getTimestamp();
Ссылка PHP Date Time полезна для таких вещей: PHP Date Time Functions
strtotime () , вероятно, лучший способ.
$seconds = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13')
Из-за ограничений эпохи unix у вас могут возникнуть проблемы с датами составления оценок до 1970 года и после 2038 года. Я решил потерять точность (= не смотреть на одну секунду), но избегать перехода через unix epoch conversion (getTimestamp). Это зависит от того, что вы делаете …
В моем случае использование 365 вместо (12 * 30) и «30» в качестве средней месячной длины уменьшило ошибку в полезном выходе.
function DateIntervalToSec($start,$end){ // as datetime object returns difference in seconds $diff = $end->diff($start); $diff_sec = $diff->format('%r').( // prepend the sign - if negative, change it to R if you want the +, too ($diff->s)+ // seconds (no errors) (60*($diff->i))+ // minutes (no errors) (60*60*($diff->h))+ // hours (no errors) (24*60*60*($diff->d))+ // days (no errors) (30*24*60*60*($diff->m))+ // months (???) (365*24*60*60*($diff->y)) // years (???) ); return $diff_sec; }
Обратите внимание, что ошибка может быть 0, если «средние» величины предназначены для diff. Документы PHP не говорят об этом … В плохом случае ошибка может быть:
Я предпочел предположить, что кто-то решил считать «м» как 30 дней, а «y» – 365, заряжая «d» с той разницей, когда «diff» проходит через не-30-дневные месяцы …
Если кто-то знает что-то об этом и может предоставить официальную документацию, приветствуется!
strtotime("2009-10-05 18:11:08") - strtotime("2009-10-05 18:07:13")