Страница 2 из 2
Re: Проверка на то выходной завтра или нет
Добавлено: Вс мар 08, 2020 8:07 pm
fandaymon
IrisKo писал(а): Вс мар 08, 2020 3:52 pm
fandaymon писал(а): Чт мар 05, 2020 6:16 pm
Весь функционал определения рабочий/не рабочий в модуле есть
Почему то не могу там его найти

Сам календарь заполнила, а вот как к нему обращаться и как у него "спрашивать" какой день рабочий а какой нет понять не могу. Была уверена что как раз те функции о которых писала в своем первом сообщении для этого и существуют, а оказалось что нет. Если не сложно можете дать ссылочку на описание этого функционала модуля календаря, на какую то инструкцию что ли?
Функционал не значит, что есть функция

Как-то так
Код: Выделить всё
function CalendarHoliday($date) {
$date_year=(int)date('Y',$date);
$date_day=(int)date('j',$date);
$date_mon=(int)date('n',$date);
if (date('w',$date) == 0 || date('w',$date) == 6) {
$workday=SQLSelectOne("select calendar_events.ID,day(DUE) as DAY,month(DUE) as MONTH from calendar_events inner join calendar_categories on calendar_events.calendar_category_id=calendar_categories.id where month(DUE)=" . $date_mon . " and day(DUE)=".$date_day." and calendar_categories.WORKDAYS=1 and year(DUE)=" . $date_year );
if ($workday) {
return 0;
} else {
return 1;
}
} else {
$holiday=SQLSelectOne("select calendar_events.ID from calendar_events inner join calendar_categories on calendar_events.calendar_category_id=calendar_categories.id where month(DUE)=" . $date_mon . " and day(DUE)=".$date_day." and calendar_categories.HOLIDAYS=1 and year(DUE)=" . $date_year );
if ($holiday) {
return 1;
} else {
return 0;
}
}
}
Re: Проверка на то выходной завтра или нет
Добавлено: Чт мар 12, 2020 2:24 am
IrisKo
В общем докладываю

Просто скопировть и вставить ваш код у меня не получилось почему то, а что и где подправить нужно я не очень соображаю, поэтому вдохновившись вашим решением и немного поняв принцип действия наваяла нечто свое примитивное. Решила тут выложить, а вдруг какому-нибудь чайнику типа меня полезно будет. Прошу прощение за то что такой неоптимальный и слишком закоментированый код получился, просто я в этих вещах профан (я все таки художник, а не программер) поэтому сначала все пишу текстом, а потом в гугле и самоучителях ищу команды которыми написанное можно реализовать

ну а комментарии оставляю чтоб через время не забыть какую "гениальную" идею я этим всем хотела донести
Код: Выделить всё
$ntoday=(int)date('w',time()); //узнаем номер дня недели
$today=date('Y-m-d',time());//сегоднешнее число конвертируем в нужный формат
$tmw=time()+86400;//числовая метка завтрашнего дня
$tomorrow=date('Y-m-d',$tmw);//конвертируем завтрашнюю дату в нужный формат
$ntomorrow=(int)date('w',$tmw);//узнаем номер дня недели завтрашнего дня
//обращаемся к календарю
$sqltoday = SQLSelectOne("SELECT * FROM calendar_events WHERE DUE='$today'"); //ищем в базе события на эту дату
$catoday = $sqltoday['CALENDAR_CATEGORY_ID'];//если событие находится записываем к какой категории оно относится, если не находится возвращает "пусто"
//повторяем то же самое для завтрашнего дня
$sqltomorrow = SQLSelectOne("SELECT * FROM calendar_events WHERE DUE='$tomorrow'");
$catomorrow = $sqltomorrow['CALENDAR_CATEGORY_ID'];
//определяем рабочий или выходной сегодня
if($catoday==9 || $catoday==10 || $catoday==15){
//если категория 9-"праздники", 10-"перенесенные выходные" или 15-"отпуск"
$td="1";// 1 - выходной
}
elseif(($ntoday==0 || $ntoday==6) && $catoday!=11){
//иначе если день недели "суббота или "воскресенье" и категория НЕ 11-"перенесенный рабочий"
$td="1";// 1 - выходной
}
elseif(($ntoday==0 || $ntoday==6) && $catoday==11){
//иначе если день недели "суббота или "воскресенье" и категория 11-"перенесенный рабочий"
$td="0";// 0 - рабочий день
}
elseif(($ntoday!=0 && $ntoday!=6) && ($catoday!=9 && $catoday!=10 && $catoday!=15)){
//иначе если день недели НЕ "суббота и НЕ "воскресенье" и категория НЕ 9-"праздники" и НЕ 10-"перенесенные выходные" и НЕ 15-"отпуск"
$td="0";// 0 - рабочий день
}
//аналогично для завтрашнего дня
if($catomorrow==9 || $catomorrow==10 || $catomorrow==15){
$tw="1";
}
elseif(($ntomorrow==0 || $ntoday==6) && $catomorrow!=11){
$tw="1";
}
elseif(($ntomorrow==0 || $ntomorrow==6) && $catomorrow==11){
$tw="0";
}
elseif(($ntomorrow!=0 && $ntomorrow!=6) && ($catomorrow!=9 && $catomorrow!=10 && $catomorrow!=15)){
$tw="0";
}
$this -> setProperty('PresentDay',$td);//устанавливаем свойству сегодняшний день значение 0 - рабочий день или 1 - выходной
$this -> setProperty('Tomorrow',$tw);//устанавливаем свойству завтрашний день значение 0 - рабочий день или 1 - выходной
//устанавливаем время ночного режима
if($tw=="0" && $td=="0"){
sg('ThisComputer.NightModeEnd',"06:40");
sg('ThisComputer.NightModeStart',"21:30");
}
elseif($tw=="1" && $td=="0"){
sg('ThisComputer.NightModeEnd',"06:40");
sg('ThisComputer.NightModeStart',"23:00");
}
elseif($tw=="1" && $td=="1"){
sg('ThisComputer.NightModeEnd',"10:00");
sg('ThisComputer.NightModeStart',"23:00");
}
elseif($tw=="0" && $td=="1"){
sg('ThisComputer.NightModeEnd',"10:00");
sg('ThisComputer.NightModeStart',"21:30");
}