<?php
function settimane($num_set,$anno){
$s=$num_set-1;
/*settimana ISO 8601
se 1° gennaio = lunedì, martedì, mercoledì o giovedì sono nella 1° dell'anno
se 1° gennaio = venerdì, sabato o domenica sono nell'ultima settimana dell'anno precedente
*/
/*calcolo che giorno è il 1° gennaio
0= dom
1= lun
2= mar
3= mer
4= gio
5= ven
6= sab
*/
$primo_anno=mktime(0,0,0,1,1,$anno);//timestamp del primo giorno
$primo_giorno=date("w", $primo_anno);//da 0 a 6
$set[2]=52;//numero normale di settimane in un anno
//verifico se per giovedì
if($primo_giorno==4){
$set[2]=53;
}
//se bisestile di mercoledì
//verificho se bisestile e se inizia di mercoledì
if(checkdate(2,29,$anno) && $primo_giorno==3){//se non è bisestile checkdate = FALSE
$set[2]=53;
}
switch($primo_giorno){
case 1: $delta= -0*(24*60*60); break;
case 2: $delta= -1*(24*60*60); break;
case 3: $delta= -2*(24*60*60); break;
case 4: $delta= -3*(24*60*60); break;
case 5: $delta= 3*(24*60*60); break;
case 6: $delta= 2*(24*60*60); break;
case 0: $delta= 1*(24*60*60); break;
}
$primo_gg_set=($s*7*24*60*60)+$primo_anno+$delta;
$ultimo_gg_set=$primo_gg_set+(6*24*60*60);
$mese=array("","gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre");
$set[0]=date("d", $primo_gg_set)." ".$mese[date("n",$primo_gg_set)]." ".date("Y",$primo_gg_set);
$set[1]=date("d", $ultimo_gg_set)." ".$mese[date("n",$ultimo_gg_set)]." ".date("Y",$ultimo_gg_set);
return $set;
}//fine function
//*********TEST************
$a=2013;//se provi il 2020 vedi che le settimane risultano 53
$num_set=52;
for($k=1; $k <=$num_set;$k++){
$vedi=settimane($k,$a);
$num_set=$vedi[2];
echo "anno $a: $k ° settimana va dal ".$vedi[0]." al ".$vedi[1]."<br />";
}
?>