giorno di inizio e fine delle settimane

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
riporta per un anno dato il giorno di inizio e fine delle settimane in accordo con ISO 8601
PHP:
<?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;//provando con 2020 si nota 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 />";
}
?>
 

Discussioni simili