哈罗!我是编程的初学者,如果有人能帮我修改代码片段,我会很感激的。我有一个带有时隙的调度系统,在这个系统中,时隙由具有开始日期的变量生成,直到结束日期为止。我想在开始时间和结束时间之间添加一个时间段,比如从12:00到13:00,但是我不知道怎么做。遵循以下代码:
$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;
}发布于 2021-04-05 20:26:24
初始化您的break-time、、start、和end,就像句点一样。检查您的句点开始/结束时间是否在中断时间之间。然后告诉周期start-time从break-end开始。
解决方案
$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;
}发布于 2021-04-05 01:45:16
您可以引用这个https://www.codexworld.com/create-time-range-array-php/,其中可以有一个数组,您可以获得开始和结束时间的索引,然后可以避免start_index和end_index之间的所有索引。
https://stackoverflow.com/questions/66946658
复制相似问题