【问题标题】:Datetime availability showing wrong results in Php日期时间可用性在 PHP 中显示错误的结果
【发布时间】:2019-11-20 20:01:04
【问题描述】:

我有一家商店的营业和关闭时间,我想展示两件事 1) 创建一个每 30 分钟的时间段 2)并与数据库匹配,时间段是否已预订或可用

这是我的数据库

表名 - usr_bookng

id      shop_id     date                start_time      end_time
1       4           11-07-2019          10:00:00        11:30:00

我尝试使用以下代码,它可以正确创建时间段但显示时间段状态错误,它显示我正在关注

结果

Array
(
    [1] => Array
        (
            [start] => 10:00
            [end] => 10:30
            [status] => availiable
        )

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

    [3] => Array
        (
            [start] => 11:00
            [end] => 11:30
            [status] => booked
        )
}

问题是这样的,只有第三时段显示已预订,三时段都应该预订,我哪里错了 这是我的代码

$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;
    }

    $todayDate = date('d-m-Y');
    if(strtotime($start_time) <= strtotime($end_time)){
        $time[$i]['start'] = $start;
        $time[$i]['end'] = $end;
        }

        $query=$this->db->query("select `id` from `usr_booking` where date = '$todayDate' and 
        (( `start_time` >= '$start' AND `start_time` <= '$start' ) || 
        (`end_time` >= '$end' AND `end_time` <= '$end'))");

        if ( $query->num_rows() > 0 )
            {
                $rows = $query->result_array();
                $time[$i]['status'] = 'booked';
            }
        else
        {
                    $rows = $query->result_array();
                    $time[$i]['status'] = 'availiable';
        }

【问题讨论】:

  • 这与“休息”或“日期时间”有什么关系?您尝试过什么来调试您的问题?
  • @NicoHaase:我尝试了很多,我认为我的查询或循环有问题
  • 所以你的逻辑不正常?
  • @MayankPandeyz:是的,先生,您是对的,不知道我错在哪里?
  • 根据您的表格结构,您如何决定商店何时可用或被阻止?

标签: php codeigniter datetime


【解决方案1】:

我认为您的列是字符串。您应该将列更改为 TIME,并将您的时间查询为 TIME。

运行一次,或者,您可以将 start_timeend_time 列从 phpMyAdmin 更改为 TIME

 ALTER TABLE usr_bookng MODIFY start_time TIME ;
 ALTER TABLE usr_bookng MODIFY end_time TIME ;

为了您的查询;

 $query=$this->db->query("select `id` from `usr_booking` where date = '$todayDate' and 
 (( `start_time` >= CAST('$start' AS TIME) AND `start_time` <= CAST('$start' AS TIME) ) || 
 (`end_time` >= CAST('$end' AS TIME) AND `end_time` <= CAST('$end' AS TIME) ))");

但我也认为您的查询中存在逻辑错误,修复该问题,最终查询应该是:

$query=$this->db->query("SELECT `id`  FROM `usr_booking` WHERE date = '$todayDate'  AND
( `start_time` <= CAST('$start' AS TIME)  AND `end_time` >= CAST('$end' AS TIME) )");

【讨论】:

  • 向我显示相同的结果,只有第三个广告位显示已预订而不是前三个
  • @snehapathak 检查更新的答案,我猜它对我有用:imgur.com/ngPkULz
  • 仍然无法正常工作,第一个插槽显示可用,第二个和第三个显示已预订,但第一个插槽也应显示为已预订
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多