Подтвердить что ты не робот

Получать интервал между двумя датами в PHP?

2009-10-05 18:11:08

2009-10-05 18:07:13

Это должно генерировать 235, как это сделать?

4b9b3361

Ответ 1

Вы можете использовать strtotime(), чтобы сделать это:

$diff = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13')

Ответ 2

С объектами DateTime вы можете сделать это следующим образом:

$date = new DateTime( '2009-10-05 18:07:13' );
$date2 = new DateTime( '2009-10-05 18:11:08' );

$diffInSeconds = $date2->getTimestamp() - $date->getTimestamp();

Ответ 3

Ссылка PHP Date Time полезна для таких вещей: PHP Date Time Functions

strtotime(), вероятно, лучший способ.

$seconds = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13')

Ответ 4

Из-за ограничений 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, если для средних значений используются "средние" величины. Документы PHP не говорят об этом... В плохом случае ошибка может быть:

  • 0 секунд, если diff применяется к временным промежуткам < 1 месяц
  • От 0 до 3 дней, если diff применяется к временным промежуткам > 1 месяц
  • От 0 до 14 дней, если diff применяется к временным промежуткам > 1 год

Я предпочитаю предполагать, что кто-то решил считать "м" как 30 дней и "у" как 365, зарядив "d" с той разницей, когда "diff" проходит через не-30-дневные месяцы...

Если кто-то знает что-то об этом и может предоставить официальную документацию, приветствуется!

Ответ 5

strtotime("2009-10-05 18:11:08") - strtotime("2009-10-05 18:07:13")