Intereting Posts
jQuery / Ajax call – он не работает на IE7 Ошибка анализа данных: JSONException: значение <br типа java.lang.String не может быть преобразовано в JSONObject Создание связанных или похожих сообщений с использованием PHP и MySQL Неустранимая ошибка: превышено максимальное время выполнения 400 секунд Фильтровать 2D-массив по значению конкретного ключа Изменить значение атрибута тега с помощью PHP DOMDocument Удалить переменный продукт из корзины с помощью ajax в woocommerce Заполнение PDF-форм с помощью PHP Javascript API отлично работает на главном сайте, но не работает на внешнем сервере Как получить & curren для отображения буквально, а не как объект HTML Почему PHP не поддерживает сеанс между страницами? Смешиваются PHP, Javascript и SQL-код Значение переменной, не переданное в инструкцию mySQL в Bootstrap Modal Удалить все несоответствующие символы в строке PHP? Zend Framework 2 – Декораторы элементов форм

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

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 не говорят об этом … В плохом случае ошибка может быть:

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

Я предпочел предположить, что кто-то решил считать «м» как 30 дней, а «y» – 365, заряжая «d» с той разницей, когда «diff» проходит через не-30-дневные месяцы …

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

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