PHP使用DatePeriod创建具有中断时间的时间段

时间:2013-12-16 08:57:48

标签: php datetime php-5.3

我想创建包含开始,结束时间和时间的时段。也打破时机。

public function getServiceScheduleSlots($duration,$break, $stTime,$enTime)
{
    $start = new DateTime($stTime);
    $end = new DateTime($enTime);
    $interval = new DateInterval("PT" . $duration. "M");
    $period = new DatePeriod($start, $duration, $end);

    foreach ($period as $dt) {
        $periods[] = $dt->format('H:iA');
    }
    return $periods;
}

例如, 我的服务开始时间上午10:00 ,结束时间中午12:00 条件:每个服务时间 30分钟& 15分钟休息。

上面的方法返回如,

  • 上午10:00 - 上午10:30
  • 上午10:30 - 上午11:00
  • 上午11:00 - 上午11:30
  • 上午11:30 - 下午12:00

预期结果为,

  • 上午10:00 - 上午10:30
  • 10:45 AM - 11:15 AM
  • 上午11:30 - 下午12:00

我想在每个时段开始时添加休息时间。

提前致谢。

1 个答案:

答案 0 :(得分:7)

这个怎么样....

function getServiceScheduleSlots($duration,$break, $stTime,$enTime)
{
        $start = new DateTime($stTime);
        $end = new DateTime($enTime);
        $interval = new DateInterval("PT" . $duration. "M");
        $breakInterval = new DateInterval("PT" . $break. "M");

        for ($intStart = $start; 
             $intStart < $end; 
             $intStart->add($interval)->add($breakInterval)) {

               $endPeriod = clone $intStart;
               $endPeriod->add($interval);
               if ($endPeriod > $end) {
                 $endPeriod=$end;
               }
               $periods[] = $intStart->format('H:iA') . 
                            ' - ' . 
                            $endPeriod->format('H:iA');
        }

        return $periods;
  }