首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用php中的时隙检查时间的可用性

用php中的时隙检查时间的可用性
EN

Stack Overflow用户
提问于 2019-07-04 15:25:36
回答 2查看 3.8K关注 0票数 2

我想使用Php和mysql每半小时显示一次商店的可用性状态,

为此,我尝试使用以下代码为我创建时隙

代码语言:javascript
复制
$duration="30";
    $start="10:00AM";
    $end="07:00PM";

    $start = new DateTime($start);
        $end = new DateTime($end);
        $start_time = $start->format('H:i');
        $end_time = $end->format('H:i');
        $i=0;
        while(strtotime($start_time) <= strtotime($end_time)){
            $start = $start_time;
            $end = date('H:i',strtotime('+'.$duration.' minutes',strtotime($start_time)));
            $start_time = date('H:i',strtotime('+'.$duration.' minutes',strtotime($start_time)));
            $i++;
            if(strtotime($start_time) <= strtotime($end_time)){
                $time[$i]['start'] = $start;
                $time[$i]['end'] = $end;
            }
        }
        print_R($time);

上面的代码显示了以下结果(正确创建时隙)

代码语言:javascript
复制
Array
(
    [1] => Array
        (
            [start] => 10:00
            [end] => 10:30
        )

    [2] => Array
        (
            [start] => 10:30
            [end] => 11:00
        )
    ...// and so on

我想要这样的结果

代码语言:javascript
复制
Array
(
    [1] => Array
        (
            [start] => 10:00
            [end] => 10:30
            [status] => availiable
        )

    [2] => Array
        (
            [start] => 10:30
            [end] => 11:00
            [status] => booked
        )

这是我在phpmyadmin中的表"booking“

代码语言:javascript
复制
id       shop_id     date        booking_start_time    booking_close_time
1        3           4-7-2019        10:00                 11:00

我该怎么做呢?提前感谢

EN

回答 2

Stack Overflow用户

发布于 2019-07-04 21:18:53

您需要从数据库中比较时间段,如下所示:

代码语言:javascript
复制
while(strtotime($start_time) <= strtotime($end_time)){
    $start = $start_time;
    $end = date('H:i',strtotime('+'.$duration.' minutes',strtotime($start_time)));
    $start_time = date('H:i',strtotime('+'.$duration.' minutes',strtotime($start_time)));
    $i++;
    if(strtotime($start_time) <= strtotime($end_time)){
        $time[$i]['start'] = $start;
        $time[$i]['end'] = $end;
    }
    //Here you need to write query and fetch data.
    $todayDate = date('d-m-Y'); //Please check date format. It should be similar as your database date field format.
    //please use data binding instead of contacting variable.
    $selectQuery = "select `id` from `booking` where date = "'.$todayDate.'" and 
        (( `booking_start_time` >= "'.$start.'" AND `booking_start_time` <= "'.$start.'" ) || 
        (`booking_close_time` >= "'.$end.'" AND `booking_close_time` <= "'.$end.'")) ";

    // After, you need to exeucte this query and need to check query output. if it has records, then you need to show booked else available. as below
    $result = mysqli_query($con, $selectQuery);
    if ($result->num_rows) {
        $time[$i]['status'] = 'booked';
    } else {
        $time[$i]['status'] = 'availiable';
    }
}
print_R($time);

希望对你有帮助。

票数 1
EN

Stack Overflow用户

发布于 2021-07-08 19:17:50

这是您查询的最佳解决方案。

代码语言:javascript
复制
select count(*) as aggregate from `bookings` where (`booking_date` = '$booking_date') and (( start_time >= '$start_time' AND end_time <= '$end_time' ) || (end_time >= '$start_time' AND start_time <= '$end_time'))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56882645

复制
相关文章

相似问题

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