PHP在一定时间间隔内有多少小时

时间:2017-07-18 19:44:42

标签: php datetime dateinterval

我的日期时间格式如下:
开始时间:2017-07-16 20:00
结束时间:2017-07-16 23:30

开始时间:2017-07-18 21:30
结束时间:2017-07-19 00:30

我需要从这些时间间隔告诉我们在18:00-22:00和22:00-06:00之间花费了多少小时(以0,5为增量)一个月。

提前感谢任何提示。

我目前的代码就是这个,但我不确定它是否涵盖了所有时间框架的可能性:

<?php
  date_default_timezone_set("UTC");

  $start = array(
    "2017-07-16 21:30:00",
    "2017-07-16 18:00:00"
  );
  $end = array(
    "2017-07-17 00:30:00",
    "2017-07-16 18:30:00"
  );

  $amount_low = 0;
  $amount_high = 0;

  for($i = 0; $i < sizeof($start); $i++) {
    $start_time = date("H:i:s", strtotime($start[$i]));
    $end_time   = date("H:i:s", strtotime($end[$i]));

    $start_date = date("Ymd", strtotime($start[$i]));
    $end_date   = date("Ymd", strtotime($end[$i]));

    // getting chunk before 22:00 if
    if(
        (strtotime($start[$i]) >= strtotime($start_date . " 18:00") && strtotime($start[$i]) < strtotime($start_date . " 22:00"))
        &&
        $start_date < $end_date
      ) {

      $interval_low = strtotime($start_date . " 22:00") - strtotime($start[$i]);
      $amount_low += ceil($interval_low / 1800) / 2;

    }

    //amount_high
    if(strtotime($start[$i]) > strtotime($start_date . " 22:00") && strtotime($start[$i]) < strtotime($start_date . " 06:00")) {

      $interval_high = strtotime($end[$i]) - strtotime($start[$i]); //needs further things
      $amount_high += ceil($interval_high / 1800) / 2;

    } elseif (strtotime($start[$i]) < strtotime($start_date . " 22:00") && strtotime($end[$i]) > strtotime($start_date . " 22:00")) {

      $interval_high = strtotime($end[$i]) - strtotime($start_date . " 22:00");
      $amount_high += ceil($interval_high / 1800) / 2;
    } else {

      $interval_low = strtotime($end[$i]) - strtotime($start[$i]);
      $amount_low += ceil($interval_low / 1800) / 2;

    }

  }
  echo $amount_low;
  echo "\n$amount_high";
?>

2 个答案:

答案 0 :(得分:0)

我相信您的解决方案的一部分来自here

Aillyn
  

您可以将它们转换为时间戳并从那里开始:

     

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

     

除以3600,因为一小时内有3600秒并使用round()   避免有很多小数位。

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

这将为您提供两次之间的小时差异。您可以执行类似的操作,只需为每个月的间隔应用它并调整数学。你可以调用它来解决这个问题,但它并不是真正的单一PHP函数。

答案 1 :(得分:0)

这对你有用吗?

$start = strtotime('2017-07-16 20:00');
$end = strtotime('2017-07-16 23:30');

$interval = $end - $start;

$hours = floor($interval / 1800)/2;

echo($hours);

这将显示两个日期之间的总小时数(以0,5为增量)(四舍五入,如果是55分钟,则为0.5小时;将'floor'替换为'ceil',相反)。< / p>