Calcula Dias Sin fines de semana ni vacaciones

Calcula la diferencia en días dada una fecha y hasta el momento actual. No se tienen en cuenta ni fines de semana ni vacaciones. Las vacaciones tienen que ser añadidas previamente al sistema, mediante un array.

// Calcula la diferencia en días dada una fecha y hasta el momento actual. No se tienen en cuenta ni fines de semana ni vacaciones. 
// Las vacaciones tienen que ser añadidas previamente al sistema, mediante un array.
// El parámetro $incial, es la fecha inicial desde la que queremos hacer el cálculo por ejemplo '2020-02-02 10:20:20'
function getDaysFromDateWithoutWEsHs(DateTime $inicial){
    //Obtenemos fecha actual para proceder con los cálculos.
    $final = new DateTime('now');
    //Descomentar si se quiere hacer un debug
    //echo $inicial->format('Y-m-d H:i:s')." - ".$final->format('Y-m-d H:i:s');
    
    //calculamos el intervalo
    $intervalo = $final->diff($inicial);
    //Una vez obtenido, obtendremos los dias naturales, sin diferenciación.
    $dias = $intervalo->days;
    // Creamos un periodo que sea "iterable", es decir que podamos iterar sobre el, a partir del periodo de las fechas de inicio y fin.(P1D significa periodos de un dia)
    $periodo = new DatePeriod($inicial, new DateInterval('P1D'), $final);
    // Array con vacacines, podemos añadir tantas como nos hagan falta, Aqui están introducidas algunas para lo que queda del 20,21 y 22.
    $vacaciones = array('2020-10-09','2020-10-12','2020-12-06','2020-12-07','2020-12-24','2020-12-25','2020-12-31','2021-01-01','2021-01-06','2021-03-19','2021-04-02','2021-04-05',
    '2021-09-12','2021-11-01','2021-12-06','2021-12-08','2021-12-25','2022-01-06','2022-04-15','2022-06-24','2022-08-15','2022-10-12','2022-11-01','2022-12-06','2022-12-08');

    foreach($periodo as $dt) {
        $curr = $dt->format('D');
        // Quitamos los sabados y domingos
        if ($curr == 'Sat' || $curr == 'Sun') {
            $dias--;
        }
        // (Opcionalmente) Quitamos los dias de vacaciones, si hemos alimentado el array.
        elseif (in_array($dt->format('Y-m-d'), $vacaciones)) {
            $dias--;
        }
    }
    return $dias; 
}