Практическая задача для тестирования — вывод формы оплаты в только в рабочее время.

Несложная задачка для тестирования 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>';
	}

2 thoughts on “Практическая задача для тестирования — вывод формы оплаты в только в рабочее время.”

  1. Может лучше из базы подтягивать список выходных дней и делать одной проверкой не входит ли текущая дата в него? Поскольку те же переносы выходного дня не будут корректно работать

    1. Конечно лучше из базы или по API, но я не уверен что это годится в рамках тестового.

Добавить комментарий

Ваш e-mail не будет опубликован.