Доступность даты и времени показывает неправильные результаты в Php - PullRequest
0 голосов
/ 11 июля 2019

У меня есть время открытия и закрытия магазина, и я хочу показать две вещи: 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';
        }

1 Ответ

0 голосов
/ 11 июля 2019

Я думаю, что ваши столбцы являются строками. Вам следует изменить столбцы на ВРЕМЯ и запросить время как ВРЕМЯ.

Запустите это один раз, или вы можете изменить столбцы start_time и end_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) )");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...