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

时间:2013-02-01 07:04:32

标签: php date datetime time

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

我有时间条目:

  • 周一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的时间段内有多少时间。输出必须是:

7时零零分00秒, 06:00:00, 08:00:00, 6时00分00秒。

1 个答案:

答案 0 :(得分:1)

您要找的是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()