Ciao. Questo è il mio script per il tuo problema. Restituisce la data finale data quella di partenza e il numero di giorni lavorativi. Tiene conto delle festività. Ho fatto un pò di prove e mi sembra funzioni correttamente.
Sicuramente si può scrivere meglio quindi sono ben accetti consigli.
Codice PHP:
<?php
// Calcolo del giorno di Pasqua fino all'ultimo anno valido
for ($i=2006; $i<=2037; $i++)
{
$pasqua = date("Y-m-d", easter_date($i));
$array_pasqua[] = $pasqua;
}
//var_dump($array_pasqua);
// Calcolo le rispettive pasquette
foreach($array_pasqua as $pasqua)
{
list ($anno,$mese,$giorno) = explode("-",$pasqua);
$pasquetta = mktime (0,0,0,date($mese),date($giorno)+1,date($anno));
$array_pasquetta[] = $pasquetta;
}
// Data da cui calcolare i giorni lavorativi
$giorno = 8;
$mese = 12;
$anno = 2006;
// Numero giorni lavorativi
$lavorativi = 15;
// Mi calcolo il timestamp della mia data di partenza
$tsData = mktime(0,0,0,$mese,$giorno,$anno);
// questi giorni son sempre festivi a prescindere dall'anno
$giorniFestivi = array("01-01",
"01-06",
"04-25",
"05-01",
"06-02",
"08-15",
"11-01",
"12-08",
"12-25",
"12-26",
);
$i = 0;
while ($i<$lavorativi)
{
$giorno_data = date("w",$tsData); //verifico il giorno: da 0 (dom) a 6 (sab)
$mese_giorno = date('m-d',$tsData); // confronto con gg sempre festivi
// Infine verifico che il giorno non sia sabato,domenica,festivo fisso o festivo variabile (pasquetta);
if ($giorno_data !=0 && $giorno_data != 6 && !in_array($mese_giorno,$giorniFestivi) && !in_array($tsData,$array_pasquetta) )
{
$i++;
}
$tsData=$tsData+86400;
}
$tsData=$tsData-86400;
$giorno_conclusivo = date('d-m-Y',$tsData);
echo $giorno_conclusivo;
?>