php DateTime计算,如何根据工作时间计算DateTime之间的时间

时间:2014-02-14 10:21:13

标签: php datetime

我想计算一些时间。我需要知道一个呼叫条目和现在关于工作时间的工作时间。

例如: 昨天15:00打电话 工作时间结束:18:00 工作时间开始:08:00 现在:10:00

所以我需要知道我的电话在工作时间内的年龄:

  • call stored>>工作时间结束:3h
  • worktimebegin>>现在:2h
  • 年龄:5h

我想使用php DateTime

你会怎么做?

1 个答案:

答案 0 :(得分:0)

我认为这可以帮到你:

//workdays till 18:00 and start 08:00
function calculateWorkHours(DateTime $Start, DateTime $End) {
    //validate given parameters
    if ($Start > $End) throw new Exception('$Start date cannot be later than $End date');

    $hours = 0;

    do {
        //get the current hour
        $currentHour = $Start->format('H');

        //while the $currenthour is lower then 18 and higher than 7
        if($currentHour < 18 && $currentHour >= 8) {
            $hours++;
        }

        $Start->modify('+1 hour');

    } while($End > $Start);

    return $hours;
}

$Start = new DateTime('yesterday 150000');
$End = new DateTime('100000');
echo calculateWorkHours($Start, $End); //returns 5

$Start = new DateTime('yesterday 060000');
$End = new DateTime('120000');
echo calculateWorkHours($Start, $End); //returns 14

$Start = new DateTime('-2 days 150000');
$End = new DateTime('100000');
echo calculateWorkHours($Start, $End); //return 15