Passei pelo mesmo problema que vc, e não encontrei nenhuma informação que atendesse a minha demanda, por este motivo criei este código e colei na pagina de login do moodle, funciona perfeitamente.
Com isso determino manualmente dias da semana, feriados e horário de acesso, as empresas precisam disso para evitar problemas trabalhistas.
No caso esta configurado para acessar:
segunda a sexta das 8 as 18 e bloqueia todos feriados nacionais e de São Paulo.
sei que isso pode ser melhorado, se alguém tiver uma sugestão melhor favor compartilhar.
Exemplo: www.sdi.art.br/ucitr/moodle
Teste acessando depois das 18 hs e finais de semana.
Espero que ajude.
//colar no inicio da pagina de login do seu moodle.
require('../config.php');
require_once('lib.php');
date_default_timezone_set('America/Sao_Paulo');
$hora = date('H:i:s');
$semana = date('w');
$dia = date('d');
$mes = date('m');
$hoje = date('d.m');
if(($hora > '08:00:01' && $hora < '18:00:01')
&&($semana >= 1 && $semana < 6)
&&($hoje != '01.01')
&&($hoje != '03.03')
&&($hoje != '04.03')
&&($hoje != '18.04')
&&($hoje != '21.04')
&&($hoje != '01.05')
&&($hoje != '19.06')
&&($hoje != '07.09')
&&($hoje != '12.10')
&&($hoje != '15.11')
&&($hoje != '25.12')){
echo 'Acesso liberado.';
}
else {
header('location: http://www.site.com.br/pagina.php');
}