如何在PHP中查找两个date之间的小时差异?

我有两个date,像“Ymd H:i:s”这样的格式。 我需要比较这两个date,并找出小时差异。

您可以将它们转换为时间戳,然后从这里开始:

 $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()来parsing你的string,并在两者之间做出区别。


资源:

  • 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年3月9日(星期日)凌晨2:00开始。

在$ 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;