Вывод определенной даты из производственного календаря

Нужно определить дату доставки исходя из статусов товара и времени до и после 13:00 по Екатеринбургу. Взял за основу производственный календарь, который отдает json данные, посмотреть пример можно тут: https://production-calendar.ru/get/ru/2024/json UPD: код переработал, изначально был другим.

              <div class="calendar">
                    <?php
                        // Новый код от 20.01.2024 даты доставки
                        $dateEkat = new DateTime("now", new DateTimeZone('Asia/Yekaterinburg'));
                        $date_now = $dateEkat->format('d.m.Y');
                        $hours = $dateEkat->format('H:m');
                        // проходимся по массиву с датами, формируем новый массив, где в качестве ключа даты будет выступать
                        // h - holiday, w - work
                        foreach ($calendar['days'] as $item) {
                            if ($item['type_id'] == 2 || $item['type_id'] == 3 || $item['type_id'] == 4 || $item['type_id'] == 6) {
                                $item['type_id'] = 'h';
                                $new_arr[][$item['type_id']] = $item['date'];
                            }elseif($item['type_id'] == 1 || $item['type_id'] == 5){
                                $item['type_id'] = 'w';
                                $new_arr[][$item['type_id']] = $item['date'];
                            }
                        }
                        // проходимся в цикле по новому массиву с целью отрезать предыдущие даты, которые уже прошли,
                        // с учетом выходных, праздничных и т.д...
                        // формируем новый массив, для того, чтобы потом подсчитать какое кол-во элементов мы отрезали
                        foreach($new_arr as $key => $val){
                            if($val['h'] == $date_now || $val['w'] == $date_now){
                                break;
                            }
                            $count_date[] = $key;
                        }
                        // проходимся в цикле по новому массиву чтобы сформировать новый массив со всеми датами
                        foreach($new_arr as $key => $val){
                            $all_date[] = $val;
                        }
                        // отсекаем от нового массива предыдущие даты, получаем массив, который начинается с сегодняшней даты
                        $res_work = array_slice($all_date, count($count_date)+1);
                        // и снова проходимся в цикле чтобы сформировать только рабочие дни
                        foreach($res_work as $key => $item){
                            foreach($item as $k => $v){
                                if($k == 'h'){
                                    unset($k);
                                }
                                if($k == 'w'){
                                    $date[] = $v;
                                }
                            }
                        }
                        // ну и собственно выводим дату по ключу, учитываем что ключ начинает отсчет с 0
                        if($p['is_order'] == 'Y' && $p['is_exist'] == 'Y' && $time[0]['time'] >= $hours){
                            echo '<p>Доставка с <strong>'.$date[11].'</strong> при оплате до '.$time[0]['time'].'</p>';
                        }elseif($p['is_order'] == 'Y' && $p['is_exist'] == 'Y' && $time[0]['time'] < $hours){
                            echo '<p>Доставка с <strong>'.$date[12].'</strong> при оплате до '.$time[0]['time'].'</p>';
                        }elseif($p['is_exist'] == 'Y' && $p['is_order'] == 'N' && $time[0]['time'] >= $hours){
                            echo '<p>Доставка с <strong>'.$date[0].'</strong> при оплате до '.$time[0]['time'].'</p>';
                        }elseif($p['is_exist'] == 'Y' && $p['is_order'] == 'N' && $time[0]['time'] < $hours){
                            echo '<p>Доставка с <strong>'.$date[1].'</strong> при оплате до '.$time[0]['time'].'</p>';
                        }
                    // Новый код от 20.01.2024 даты доставки
                    ?>
              </div>

Такс... вот этот код работает вроде, если кому не сложно, подкиньте идеи, может можно как-то по другому сделать?


Ответы (0 шт):