В общем докладываю

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

ну а комментарии оставляю чтоб через время не забыть какую "гениальную" идею я этим всем хотела донести
Код: Выделить всё
$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");
}