[Сценарий] Функция Рабочий/Выходной день

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Re: Функция Рабочий/Выходной день

Сообщение webms » Чт фев 01, 2018 12:21 pm

*удалил*
Последний раз редактировалось webms Пн май 07, 2018 11:10 am, всего редактировалось 2 раза.
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Re: Функция Рабочий/Выходной день

Сообщение webms » Чт фев 01, 2018 12:21 pm

Если у кого то были такие же проблемы что у меня, вот решение:

Закинуть файл в папку /htdocs/lib
weekDay.class.phpПоказать

Код: Выделить всё

<?php
function weekDay($date)
    {
        $this_year = (int) date('Y', $date);
        $url = "http://xmlcalendar.ru/data/ru/".$this_year."/calendar.xml";
        $url_local = "calendar.xml";

        // Отключение ошибок libxml и передача полномочий по выборке и обработке информации об ошибках
        libxml_use_internal_errors(true);

        $res = @simplexml_load_file($url); //загружаем его и раскладываем на массив
		
        if ($res === false)
        {   //Не удалось получить данные
            $res = @simplexml_load_file($url_local); // Возьмем ранее загруженный календарь

            foreach(libxml_get_errors() as $error)
            {   //регистрируем ошибку
                registerError('Не удалось получить данные от сервиса xmlcalendar<br>Скрипт сработал используя бэкап данных', $error -> message);
            }
            libxml_clear_errors();
        }
        else
        {   //Если прочитали без ошибок
            $res->asXML($url_local); //запишем в файл на всякий случай
		}
		
		//Проверяем сегодняшний день по производственному календарю (рабочий или нет)
		$weekDay = -1;

		$this_date = date('m.d', $date);

		foreach($res -> days -> day as $day)
			{
				$type = $day -> attributes() -> t; //тип дня: 1-выходной день, 2-короткий день, 3-рабочий день (суббота/воскресен)
				$CalDate = $day -> attributes() -> d; //дата

				if ($this_date == $CalDate)
				{
					if ($type == 1)
					{ //Выходной
						$weekDay = 0;
					}
					elseif($type == 2)
					{
						//Короткий день, запишим как рабочий
						$weekDay = 1;
					}
					elseif($type == 3)
					{ //Перенесенный рабочий
						$weekDay = 1;
					}
				}
			}
		
		//Если в производственном календаре ничего не нашлось
		if ($weekDay == -1)
		{
			if (date('w', $date) == 0 || date('w', $date) == 6)
			{
				$weekDay = 0;
			}
			else
			{
				$weekDay = 1;
			}
		}

		return $weekDay;
	}


// 0 - выходной, 1 - рабочий день
//**********************************************
//weekDay(strtotime("+1 day")); //завтра
//weekDay(time()); //сегодня
//echo weekDay(mktime(0, 0, 0, 2, 26)); //месяц, день
	
?>
    Потом в сценариях можно использовать следующие:
     0 - выходной, 1 - рабочий день
    **********************************************
    weekDay(strtotime("+1 day")); //завтра
    weekDay(time()); //сегодня
    weekDay(mktime(0, 0, 0, 2, 26)); //месяц, день  
Последний раз редактировалось webms Пн май 07, 2018 11:11 am, всего редактировалось 2 раза.
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Re: Функция Рабочий/Выходной день

Сообщение webms » Пт фев 02, 2018 10:47 am

обновил код, а то вчерашний не совсем правильно работал с сохраненным файлом
теперь все ок
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Функция Рабочий/Выходной день

Сообщение directman66 » Пн май 07, 2018 7:23 am

Класс закинул в библиотеку /var/www/lib/weekDay.class.php, сохраняю тестовый сценарий

Код: Выделить всё

 if (weekDay(time()) = 0) {
 echo  'Сегодня выходной';
}
и он не сохраняется c формулировкой
Пожалуйста, заполните необходимые поля!
Может нужен ребут Мажордома?
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Функция Рабочий/Выходной день

Сообщение skysilver » Пн май 07, 2018 10:18 am

directman66 писал(а):
Пн май 07, 2018 7:23 am
и он не сохраняется c формулировкой
В условии надо сравнивать, а не присваивать.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Re: Функция Рабочий/Выходной день

Сообщение webms » Пн май 07, 2018 11:17 am

Да кстати, в коде выше нужно расскоментировать строку, иначе короткий день не отмечал рабочим в сб и вс
//Короткий день, запишим как рабочий
$weekDay = 1;

Код выше обновил https://majordomo.smartliving.ru/forum/ ... 597#p70597
Последний раз редактировалось webms Пн май 07, 2018 11:21 am, всего редактировалось 1 раз.
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Re: Функция Рабочий/Выходной день

Сообщение webms » Пн май 07, 2018 11:17 am

directman66 писал(а):
Пн май 07, 2018 7:23 am
Класс закинул в библиотеку /var/www/lib/weekDay.class.php, сохраняю тестовый сценарий

Код: Выделить всё

 if (weekDay(time()) = 0) {
 echo  'Сегодня выходной';
}
и он не сохраняется c формулировкой
Пожалуйста, заполните необходимые поля!
Может нужен ребут Мажордома?

Код: Выделить всё

 if (weekDay(time()) == 0) {
 echo  'Сегодня выходной';
}
нужно ставить "==", ты же программист)
За это сообщение автора webms поблагодарил:
directman66 (Пн май 07, 2018 11:18 am)
Рейтинг: 1.16%
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Функция Рабочий/Выходной день

Сообщение directman66 » Пн май 07, 2018 11:17 am

Точно, я ж тупо скопировал из условия. Спасибо за внимание )))

Может запилить в виде модуля с настройками справочника для разных стран?
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Re: Функция Рабочий/Выходной день

Сообщение webms » Пн май 07, 2018 11:24 am

directman66 писал(а):
Пн май 07, 2018 11:17 am
Точно, я ж тупо скопировал из условия. Спасибо за внимание )))

Может запилить в виде модуля с настройками справочника для разных стран?
я не умею писать модули)
да и хз откуда данные брать для других стран
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Функция Рабочий/Выходной день

Сообщение directman66 » Пн май 07, 2018 11:32 am

Запилю, не вопрос, это упростит развертывание библиотек.
Ждем коллег из СНГ с информацией.
Только мне кажется на каждый ресурс придется свои парсеры делать. И лучше работать с локальной базой данных, которую периодически обновлять.
За это сообщение автора directman66 поблагодарил:
webms (Пн май 07, 2018 11:34 am)
Рейтинг: 1.16%
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Ответить