Как найти часовую разницу между двумя датами в PHP?

У меня две даты, сформированные как «Ymd H: i: s». Мне нужно сравнить эти две даты и выяснить разницу в часах.

Вы можете преобразовать их в метки времени и перейти оттуда:

 $hourdiff = round((strtotime($time1) - strtotime($time2))/3600, 1); 

Разделение на 3600, потому что есть 3600 секунд за один час и использование round() чтобы избежать большого количества десятичных знаков.

Вы также можете использовать интерфейс DateTime –

 $d1= new DateTime("06-08-2015 01:33:26pm"); $d2= new DateTime("06-07-2015 10:33:26am"); $interval= $d1->diff($d2); echo ($interval->days * 24) + $interval->h; 

В качестве дополнения к принятому отвечу я хотел бы напомнить, что \DateTime::diff доступен!

 $f = 'Ymd H:i:s'; $d1 = \DateTime::createFromFormat($date1, $f); $d2 = \DateTime::createFromFormat($date2, $f); /** * @var \DateInterval $diff */ $diff = $d2->diff($d1); $hours = $diff->h + ($diff->days * 24); // + ($diff->m > 30 ? 1 : 0) to be more precise 

\DateInterval .

 $seconds = strtotime($date2) - strtotime($date1); $hours = $seconds / 60 / 60; 

Вы можете использовать strtotime() чтобы анализировать ваши строки и делать разницу между ними.


Ресурсы :

  • php.net – strtotime ()

Проблема состоит в том, что с использованием этих значений результат равен 167, и это должно быть 168:

 $date1 = "2014-03-07 05:49:23"; $date2 = "2014-03-14 05:49:23"; $seconds = strtotime($date2) - strtotime($date1); $hours = $seconds / 60 / 60; 

Это из-за экономии дневного времени. Переход на летнее время (США) 2014 года начался в 2:00 утра в воскресенье, 9 марта.

Вы теряете один час в течение периода от $ date1 = "2014-03-07 05:49:23" до $ date2 = "2014-03-14 05:49:23";

Вы можете попробовать следующее:

 $dayinpass = "2016-09-23 20:09:12"; $today = time(); $dayinpass= strtotime($dayinpass); echo round(abs($today-$dayinpass)/60/60); 
 $date1 = date_create('2016-12-12 09:00:00'); $date2 = date_create('2016-12-12 11:00:00'); $diff = date_diff($date1,$date2); $hour = $diff->h;