首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP调度系统插槽中添加范围

在PHP调度系统插槽中添加范围
EN

Stack Overflow用户
提问于 2021-04-04 23:14:04
回答 2查看 68关注 0票数 1

哈罗!我是编程的初学者,如果有人能帮我修改代码片段,我会很感激的。我有一个带有时隙的调度系统,在这个系统中,时隙由具有开始日期的变量生成,直到结束日期为止。我想在开始时间和结束时间之间添加一个时间段,比如从12:00到13:00,但是我不知道怎么做。遵循以下代码:

代码语言:javascript
复制
$duration = 15;
$cleanup = 0;
$start = "08:00";
$end = "18:00";

function timeslots($duration, $cleanup, $start, $end){
    $start = new DateTime($start);
    $end = new DateTime($end);
    $interval = new DateInterval("PT".$duration."M");
    $cleanupInterval = new DateInterval("PT".$cleanup."M");
    $slots = array();
    
    for($intStart = $start; $intStart<$end; $intStart->add($interval)->add($cleanupInterval)){
        $endPeriod = clone $intStart;
        $endPeriod->add($interval);
        if($endPeriod>$end){
            break;
        }
        
        $slots[] = $intStart->format("H:iA")." - ". $endPeriod->format("H:iA");
        
    }
    
    return $slots;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-05 20:26:24

初始化您的break-time、start、end,就像句点一样。检查您的句点开始/结束时间是否在中断时间之间。然后告诉周期start-timebreak-end开始。

解决方案

代码语言:javascript
复制
$duration = 15;
$cleanup = 0;
$start = "08:00";
$end = "18:00";

// add breakStart and breakEnd times
$breakStart = "12:00";
$breakEnd = "13:00";

function timeslots($duration, $cleanup, $start, $end){
    $start = new DateTime($start);
    $end = new DateTime($end);

    $breakStart = new DateTime($breakStart);
    $breakEnd = new DateTime($breakEnd);

    $interval = new DateInterval("PT".$duration."M");
    $cleanupInterval = new DateInterval("PT".$cleanup."M");
    $slots = array();
    
    for($intStart = $start; $intStart<$end; $intStart->add($interval)->add($cleanupInterval)){

        $endPeriod = clone $intStart;
        $endPeriod->add($interval);

        if($endPeriod > $breakStart && $endPeriod < $breakEnd){
            // this block when $endPeriod is between break-time
            $intStart = $breakEnd; //so make the starting period time to start after break
            $endPeriod->add($interval);
        } elseif($intStart > $breakStart  && $endPeriod < $breakEnd){
            // this block when both $intStart and $endPeriod is between break-time
            $intStart = $breakEnd; //so make the starting period time to start after break
            $endPeriod->add($interval);
        } elseif($intStart > $breakStart  && $endPeriod > $breakEnd){
            // this block when $intStart is between break-time
            $intStart = $breakEnd; //so make the starting period time to start after break
            $endPeriod->add($interval);
        } else{
            // your logic for creating the slots
            if($endPeriod>$end){
                break;
            }
            $slots[] = $intStart->format("H:iA")." - ". $endPeriod->format("H:iA");
        }

    }
    
    return $slots;
}
票数 0
EN

Stack Overflow用户

发布于 2021-04-05 01:45:16

您可以引用这个https://www.codexworld.com/create-time-range-array-php/,其中可以有一个数组,您可以获得开始和结束时间的索引,然后可以避免start_index和end_index之间的所有索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66946658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档