分区在php中从开始时间到结束时间有20分钟的时间
Partion 20 min slot of time in php from start and end time
Ex ->
Start time = 2015-10-21 09:00:00
end time = 2015-10-21 19:45:00
所以根据我的例子-开始时间是9 am to 7-45pm
所以我希望在PHP中有20分钟的时间,比如
9:00 - 9:20 , 9-20 to 9-40 etc
。而且对于ex 12:00-12:20 , 2:40 to 2:60
预订,那么它将不包括在此列表中。
我想做20分钟的插播。是的,但是它也会过滤
使用php的时差,我有开始时间和结束时间。
然后我想检查从开始到结束时间可能有多少个20分钟的插槽
=>它还会检查某个时间段是否已经预订,然后不考虑
IN SHOT 1 to 2 or 3-5 is break time then it will not consider.
这将满足您的需求。但是应该为数组元素保留特定的格式,以便于计算。
<?php
$start_time = '2015-10-21 09:00:00'; //start time as string
$end_time = '2015-10-21 19:45:00'; //end time as string
$booked = array('12:20-12:40','13:00-13:20'); //booked slots as arrays
$start = DateTime::createFromFormat('Y-m-d H:i:s',$start_time); //create date time objects
$end = DateTime::createFromFormat('Y-m-d H:i:s',$end_time); //create date time objects
$count = 0; //number of slots
$out = array(); //array of slots
for($i = $start; $i<$end;) //for loop
{
$avoid = false; //booked slot?
$time1 = $i->format('H:i'); //take hour and minute
$i->modify("+20 minutes"); //add 20 minutes
$time2 = $i->format('H:i'); //take hour and minute
$slot = $time1."-".$time2; //create a format 12:40-13:00 etc
for($k=0;$k<sizeof($booked);$k++) //if booked hour
{
if($booked[$k] == $slot) //check
$avoid = true; //yes. booked
}
if(!$avoid && $i<$end) //if not booked and less than end time
{
$count++; //add count
$slots = ['start'=>$time1, 'stop'=>$time2]; //add count
array_push($out,$slots); //add slot to array
}
}
var_dump($out); //array out
echo $count ." of slots available";
如果您使用预订日期时间作为数组,请使用下面的代码。
<?php
$start_time = '2015-10-21 09:00:00'; //start time as string
$end_time = '2015-10-21 19:45:00'; //end time as string
$booked = ['2015-10-21 12:20:00','2015-10-21 12:40:00', '2015-10-21 13:00:00','2015-10-21 13:20:00'];
//booked slots as arrays
$start = DateTime::createFromFormat('Y-m-d H:i:s',$start_time); //create date time objects
$end = DateTime::createFromFormat('Y-m-d H:i:s',$end_time); //create date time objects
$time1 = $start;
$count = 0; //number of slots
$out = array(); //array of slots
for($i = $start; $i<$end;) //for loop
{
$avoid = false;
$t1 = date_timestamp_get($i);
$t2 = $t1+(20*60);
for($k=0;$k<sizeof($booked);$k+=2) //if booked hour
{
$st = DateTime::createFromFormat('Y-m-d H:i:s',$booked[$k]);
$en = DateTime::createFromFormat('Y-m-d H:i:s',$booked[$k+1]);
if( $t1 >= date_timestamp_get($st) && $t2 <= date_timestamp_get($en) )
$avoid = true; //yes. booked
}
$slots =[ $i->format('H:i'),$i->modify("+20 minutes")->format('H:i')];
if(!$avoid && $i<$end) //if not booked and less than end time
{
$count++;
array_push($out,$slots); //add slot to array
}
}
var_dump($out); //array out
echo $count ." of slots available";
您必须循环到最后一个单轮(小于或等于end time
),同时我们每次增加start time
20分钟,并将其添加到数据数组中。
你可以在PHP文档页面看到更多关于我使用的函数:strtotime, date
<?php
$start_time = strtotime('2015-10-21 09:00:00');
$end_time = strtotime('2015-10-21 19:45:00');
$slot = strtotime(date('Y-m-d H:i:s',$start_time) . ' +20 minutes');
$data = [];
for ($i=0; $slot <= $end_time; $i++) {
$data[$i] = [
'start' => date('Y-m-d H:i:s', $start_time),
'end' => date('Y-m-d H:i:s', $slot),
];
$start_time = $slot;
$slot = strtotime(date('Y-m-d H:i:s',$start_time) . ' +20 minutes');
}
print_r($data);
?>
相关文章:
- 从工作日结束到下一个工作日开始的完整日历JS包装时间
- 如何在dhtmlxgantt中显示灯箱中的开始日期、结束日期和持续时间
- 如何使用jquery获取结束时间
- 基础日期选择器、结束日期(和时间)不能早于开始日期(和时间)
- 结束日期作为基础日期时间选择器中的选定开始日期
- 在for循环中另一个音频结束后播放一段时间的音频
- 如何在Dynamics CRM中获取时区的夏令时开始和结束时间
- 识别有角度的spa应用程序页面渲染结束时间
- 尝试创建Javascript表单来计算结束时间
- Javascript REGEX:需要从嵌入URL中检索ID以及开始和结束时间
- 如何在 javascript 中获取指定时区的一天的开始时间和结束时间(以 UTC 为单位)
- 如何在时间结束时发出警报
- 如何在 jQuery 中时间结束时发出警报
- j查询开始时间/结束时间验证
- 计时器在时间结束时发出警报
- 如何通过正确切换在最长执行时间结束时给出用户定义的超时消息
- 当Css3动画被相同的事件触发时,具有相同持续时间的动画在不同的时间结束
- 创建'时间结束'从价值
- 禁用Onclick直到持续时间结束
- 使用javascript验证日期、时间开始和时间结束