首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自开始和结束时间在php中的20分钟时间槽

自开始和结束时间在php中的20分钟时间槽
EN

Stack Overflow用户
提问于 2015-10-21 09:58:49
回答 2查看 4.6K关注 0票数 2

Ex ->

代码语言:javascript
复制
 Start time = 2015-10-21 09:00:00
 end time  = 2015-10-21 19:45:00

因此,根据我的示例-开始时间是9 am to 7-45pm

所以我想要20分钟的时间。在php类

9:00 - 9:20 , 9-20 to 9-40 etc。但对于ex 12:00-12:20 , 2:40 to 2:60预订,那么它将不包括在这个列表中。

我想安排20分钟的时间。是的,但是它也会过滤alr。

使用php中的时间差,我有开始时间和结束时间。

然后我要检查从开始到结束的时间可能有多少20分钟。

=>它也会检查某个时段是否已经预订,然后不考虑它。

代码语言:javascript
复制
IN SHOT 1 to 2 or 3-5 is break time then it will not consider. 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-21 10:44:05

这能满足你的需要。但是,为了便于计算,应该为数组元素保留特定的格式。

代码语言:javascript
复制
<?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";

如果使用已预订的日期时间作为数组,请使用下面的代码。

代码语言:javascript
复制
<?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";
票数 5
EN

Stack Overflow用户

发布于 2015-10-21 10:09:52

您必须循环遍历直到最后一个单循环(小于或等于end time),同时我们每次增加start time 20分钟,并将其添加到数据数组中。

您可以在PHP文档页面上看到有关我使用的函数的更多信息:strtotime日期

代码语言:javascript
复制
<?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);

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

https://stackoverflow.com/questions/33256246

复制
相关文章

相似问题

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