我试图找到一种方法来确定一个时间跨度是部分还是完全在另一个时间跨度内。例如:
我有时间条目:
- 周一 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。
你正在寻找的是DateTime::diff
它返回一个实例DateInterval
这里有一个小例子:
$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()