2 个特定日期之间的小时差异 - PHP


Difference in hours between 2 particular days - PHP

我有两个日期对象,比如 10/01/2016 00:00:00 到 18/01/2016 08:00:00。我想检查这两个日期是否位于星期五上午 12 点到星期日上午 12 点之间,那么如何找到小时差异?

PHP代码 -

$t1 = StrToTime($date2);
$t2 = StrToTime($date1);
$diff = $t1-$t2;
$hours = abs($diff / ( 60 * 60 ));

我被严重困在其中。请有人帮忙。

提前谢谢。

如果我正确理解了您的问题,您想测试日期是星期五还是星期六,与它们之间的距离无关。

您可以使用 DateTime 对象的 format() 函数来获取日期的工作日,然后测试它是星期五 (5) 还是星期六 (6):

$t1 = DateTime::createFromFormat("d/m/Y H:i:s", "10/01/2016 00:00:00");
$t2 = DateTime::createFromFormat("d/m/Y H:i:s", "18/01/2016 08:00:00");
function testDate($date) {
    $d = $date->format("N");
    if ($d == 5) return true;
    if ($d == 6) return true;
    return false;
}
$d1 = testDate($t1);
$d2 = testDate($t2);
var_dump($d1, $d2);
// Result:
// bool(false)
// bool(false)

然后,您可以使用 DateTime::diff() 函数来获得差异:

$diff = $t1->diff($t2);
var_dump($diff);

结果:

object(DateInterval)#3 (15) {
  ["y"]=>
  int(0)
  ["m"]=>
  int(0)
  ["d"]=>
  int(8)
  ["h"]=>
  int(8)
  ["i"]=>
  int(0)
  ["s"]=>
  int(0)
  ["weekday"]=>
  int(0)
  ["weekday_behavior"]=>
  int(0)
  ["first_last_day_of"]=>
  int(0)
  ["invert"]=>
  int(0)
  ["days"]=>
  int(8)
  ["special_type"]=>
  int(0)
  ["special_amount"]=>
  int(0)
  ["have_weekday_relative"]=>
  int(0)
  ["have_special_relative"]=>
  int(0)
}

所以,8天($diff['days'])和8小时($diff['h']

您可以使用:

$date1 = "2016-08-14 00:00:00"; //more higger day
$date2 = "2016-08-13 00:00:00";    
$diff = abs(strtotime($date2) - strtotime($date1)); 
$years   = floor($diff / (365*60*60*24)); 
$months  = floor(($diff - $years * 365*60*60*24) / (30*60*60*24)); 
$days    = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));    
$hours   = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));     
$minuts  = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);     
$seconds = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minuts*60)); 
printf("%d years, %d months, %d days, %d hours, %d minuts'n, %d seconds'n", $years, $months, $days, $hours, $minuts, $seconds); 

输出:0年,0个月,1天

,0小时,0分钟,0秒

现在,您可以执行以下操作:

$date1 = "2016-08-14 00:00:00"; //more higger day
$date2 = "2016-08-13 00:00:00";    
$diff = abs(strtotime($date2) - strtotime($date1)); 
$years   = floor($diff / (365*60*60*24)); 
$months  = floor(($diff - $years * 365*60*60*24) / (30*60*60*24)); 
$days    = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));    
$hours   = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));   
echo "Totals hours: ".($days*24 + $hours);

返回 24(您可以乘以年、月等)