Несложная задачка для тестирования PHP программистов после курсов.
Условие «Необходимо настроить вывод формы оплаты таким образом, чтобы она работала с 8.30 до 16.30 в будние дни. В выходные и праздники форма работать не должна.»
Решение
//Платежный шлюз активен только 8-30 до 16-30 МСК date_default_timezone_set("UTC"); $current_time['unixtime']=time()+3600*3; $current_time['dayofweek'] = date ('w', $current_time['unixtime']); $current_time['day'] = date ('j', $current_time['unixtime']); $current_time['month'] = date ('n', $current_time['unixtime']); $current_time['daytime'] = $current_time['unixtime'] % 86400; $is_working_time=false; //Проверка на рабочее и нерабочее время //Выводим только если текущее время > 8-30 и < 16-30 if (($current_time['daytime']> 30600) && ($current_time['daytime'] < 59400 )) { $is_working_time=true; } //Выходные if (($current_time['dayofweek'] == 0) || ($current_time['dayofweek'] == 6 )) { $is_working_time=false; } //Праздники //с 29 апреля по 2 мая (4 дня); if (($current_time['day'] == 29) && ($current_time['month'] == 4 )) { $is_working_time=false; } if (($current_time['day'] == 30) && ($current_time['month'] == 4 )) { $is_working_time=false; } if (($current_time['day'] == 1) && ($current_time['month'] == 5 )) { $is_working_time=false; } if (($current_time['day'] == 2) && ($current_time['month'] == 5 )) { $is_working_time=false; } //9 мая (1 день); if (($current_time['day'] == 9) && ($current_time['month'] == 5 )) { $is_working_time=false; } //с 10 по 12 июня (3 дня); if (($current_time['day'] == 10) && ($current_time['month'] == 6 )) { $is_working_time=false; } if (($current_time['day'] == 11) && ($current_time['month'] == 6 )) { $is_working_time=false; } if (($current_time['day'] == 12) && ($current_time['month'] == 6 )) { $is_working_time=false; } //с 3 по 5 ноября (3 дня). if (($current_time['day'] == 3) && ($current_time['month'] == 11 )) { $is_working_time=false; } if (($current_time['day'] == 4) && ($current_time['month'] == 11 )) { $is_working_time=false; } if (($current_time['day'] == 5) && ($current_time['month'] == 11 )) { $is_working_time=false; } if ($is_working_time) { $payment_message = 'Вывод платежного шлюза'; } else { $payment_message = '<i>Уважаемые Клиенты! Оплата заказа по банковской карте производится в рабочие дни с 08.30 до 16.30 по московскому времени. Пожалуйста, оплатите Ваш заказ в указанное время.</i>'; }
Может лучше из базы подтягивать список выходных дней и делать одной проверкой не входит ли текущая дата в него? Поскольку те же переносы выходного дня не будут корректно работать
Конечно лучше из базы или по API, но я не уверен что это годится в рамках тестового.