PHP 查找一个时间跨度在另一个时间跨度内有多少小时


PHP Finding how many hours of a timespan is within another timespan

我正在尝试找到一种方法来确定一个时间跨度是部分还是完全在另一个时间跨度内。例如:

我有以下时间条目:

  • 周一 18:30:00 至周二 05:00:00,
  • 周一 23:00:00
  • 至周二 05:00:00,
  • 周一 20:00:00
  • 至周二 08:00:00,
  • 星期一 00:00:00
  • 至星期二 08:00:00,

并且需要为每个人查找在 22:00:00 到 06:00:00 的时间跨度内有多少时间。输出需要为:

07:

00:00,06:00:00,08:00:00,06:00:00.

您要查找的是返回DateInterval实例的DateTime::diff

这里有一个小例子:

$d1 = new DateTime("Monday 18:30:00");
$d2 = new DateTime("Tuesday 05:00:00");
$limit1 = new DateTime("Monday 22:00:00");
$limit2 = new DateTime("Tuesday 06:00:00");
$within1 = $d1->getTimestamp() < $limit1->getTimestamp() ? $limit1 : $d1;
$within2 = $d2->getTimestamp() < $limit2->getTimestamp() ? $d2 : $limit2;
$interval = $within1->diff($within2);
print_r($interval);
print_r($interval);

输出:

DateInterval Object
(
    [y] => 0
    [m] => 0
    [d] => 0
    [h] => 7
    [i] => 0
    [s] => 0
    [invert] => 0
    [days] => 0
)

您可以直接读取此属性,也可以使用 DateInterval::format()