Я работаю с API в codeigniter, у меня есть две таблицы, и я хочу получить данные следующих 7 дней с 30-минутным интервалом (независимо от того, забронирован ли магазин или доступен)
моя первая таблица - "дополнительная_информация"
id shop_id shop_open_time shop_close_time
1 3 09:00:00 22:00:00
Второй стол "бронирование"
id user_id shop_id service_id duration(in minutes) services_dates start_time end_time
1 2 3 1 20 2019-03-26 09:01:10 10:00:00
теперь я хочу временной интервал идентификатора магазина (начните с его открытого времени, чтобы закрывать время) с каждым 30-минутным интервалом (независимо от того, зарегистрировано время или нет)
другими словами, теперь я хочу получить результат, подобный
{
"Status": true,
"Result": {
"id": "4",
"salon_id": "3",
"shop_open_time": "09:00:00.000000",
"shop_close_time": "22:00:00.000000",
"availability": [
{
"id": 1,
"date": "27-Mar-2019",
"arrTimeSlots": [
{
"id": 1,
"time": "09:00 AM",
"alreadyBooked": false
},
{
"id": 2,
"time": "09:30 AM",
"alreadyBooked": false
},
.....
{
"id": 2,
"date": "28-Mar-2019",
"arrTimeSlots": [
{
"id": 1,
"time": "09:00 AM",
"alreadyBooked": false
},
{
"id": 2,
"time": "09:30 AM",
"alreadyBooked": false
},
{
"id": 3,
"time": "10:00 AM",
"alreadyBooked": false
},
{
"id": 4,
"time": "10:30 AM",
"alreadyBooked": false
},
....
//next 5 days
...
И я попробовал следующий код, но получил неправильные данные, я получаю данные этой даты, которые хранятся в базе данных, но я хочу проверить текущую дату на следующие 6 дней, вот мой код
$add_data['shop_id'] = ($this->input->post('shop_id') && !empty($this->input->post('shop_id'))) ? $this->input->post('shop_id') : NULL;
$this->db->select('*');
$this->db->from('additional_info');
$this->db->where('shop_id',$add_data['shop_id']);
$query = $this->db->get();
if ( $query->num_rows() > 0 )
{
$row = $query->row_array();
$start=$row['shop_open_time'];
$end=$row['shop_close_time'];
$start_time=substr($start, 0, -10);
$end_time=substr($end, 0, -10);
$start_time = new DateTime($start_time);
$close_time = new DateTime($end_time);
$periods = new DatePeriod($start_time, new DateInterval('PT30M'), $close_time);
$availability_time = array();
$i=0;
foreach ($periods as $period) {
$availability_time[] = array('id'=>++$i, 'time'=>$period->format('h:i A'), 'alreadyBooked'=>false);
}
$now = new DateTime();
$startDate = date('d-M-Y');
$endDate = $now->add(new DateInterval('P1W'))->format('d-M-Y');
$availability = array();
//To find dates between two dates as an array
$dates = new DatePeriod(
new DateTime($startDate), new DateInterval('P1D'), new DateTime($endDate)
);
$ii = 0;
foreach ($dates as $dt) {
$availability[] = array('id'=>++$ii, 'date'=>$dt->format('d-M-Y'),'arrTimeSlots'=>$availability_time, 'isSelected'=>false);
}
$availability_time = array_fill_keys($times, 'available');
function book(&$availability_time, $start, $end)
{
// $i=0;
//foreach($availability_time as $k => $v)
// $availability['id']=++$i;
// if(strtotime($k) >= strtotime($start) && strtotime($k) <= strtotime($end))
// $availability_time = 'booked';
}
$this->db->select('*');
$this->db->from('usr_booking');
$this->db->where('shop_id',$add_data['shop_id']);
$queryc = $this->db->get();
foreach($queryc->result_array() as $results)
{
//print_R($results);
$s=$results['start_time'];
$e=$results['end_time'];
}
$records = $query->result_array();
$newrecord=$records['0'];
$newrecord['availability']=$availability;
return $newrecord;
}
else
{
return false;
}