[risolto] quante settimane ci sono in un anno

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
puoi prendere spunto da questo codice
si riferisce ad un solo mese ma dovresti essere in grado di modificarlo
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
prova questa
PHP:
<?php
function settimane($num_set=1,$anno){
	$settimana=$num_set-1;
	$primo_anno=mktime(0,0,0,1,1,2013);//di che girno cade il 1° dell'anno
	$num_gg_anno=date("w", $primo_anno)-1;//giorni da togliere
	$partenza=$primo_anno-$num_gg_anno*(24*60*60);//lunedi della prima settimana dell'anno
	$primo_giorno=$partenza+$settimana*7*24*60*60;
	$ultimo_giorno=$primo_giorno+6*24*60*60;
	//sin qui le date sono tutte in timestamp
	$mese=array("","gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic");
	$set[0]=date("d", $primo_giorno)."/".$mese[date("n",$primo_giorno)]."/".date("Y",$primo_giorno);
	$set[1]=date("d", $ultimo_giorno)."/".$mese[date("n",$ultimo_giorno)]."/".date("Y",$ultimo_giorno);
	return $set;
}
//****test*****
for($k=1;$k<53;$k++){
	$vedi=settimane($k,2013);
	echo "sett. $k va dal ".$vedi[0]." al ".$vedi[1]."<br />";
}
?>
ho messo tutti i passaggi, ma forse si può condensare
provala anche per altri anni
 

colomber

Utente Attivo
4 Dic 2012
232
1
18
funziona però c'é un problema che ritroviamo nell'anno 2015 da wikipedia:


Secondo lo standard internazionale ISO 8601, in un anno sono presenti 52 o 53 settimane.
La settimana 01 dell'anno è la prima settimana che contiene quattro o più giorni del nuovo anno.

Può essere anche equivalentemente definita come:

la settimana che contiene il primo giovedì dell'anno;
la settimana che contiene il 4 gennaio;
la settimana che inizia con il lunedì fra il 29 dicembre ed il 4 gennaio.

Ne deriva che se il 1º gennaio è un lunedì, martedì, mercoledì o giovedì allora è nella settimana 01. Se è un venerdì, sabato o domenica allora appartiene all'ultima settimana (52ª o 53ª) dell'anno precedente.



e per mettere la data in questo formato?

sett. 13 va dal 21/mar/2016 al 27/mar/2016 ----> sett. 13 va dal 21 marzo 2016 al 27 marzo 2016
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
alla prima osservazione devo guardare e si devono eventualmente fare degli if in funzione di quello che hai detto
cioè verificare quanti e quali gg cadono in nell'anno.
per la seconda è più semplice
1) modifichi la riga dell'array (non la scrivo tutta) da
PHP:
$mese=array("","gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic");

in
PHP:
$mese=array("","gennaio","febbraio","mar","apr","mag","giu","lug","ago","set","ott","nov","dic");

2) modifichi le righe dell'output (ne metto solo una, l'altra è uguale)
da
PHP:
$set[0]=date("d", $primo_giorno)."/".$mese[date("n",$primo_giorno)]."/".date("Y",$primo_giorno);

in
PHP:
$set[0]=date("d", $primo_giorno)." ".$mese[date("n",$primo_giorno)]." ".date("Y",$primo_giorno);

cioè al posto dello slash metti uno spazio
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
prova così, a te la verifica se risulta come il link che hai postato
PHP:
<?php
function settimane($num_set=1,$anno){
	$settimana=$num_set-1;
	$primo_anno=mktime(0,0,0,1,1,$anno);//di che girno cade il 1° dell'anno
	$set_primo=date("W", $primo_anno);//in che settimana cade 01 o 52 o 53 (se 52 o 53 anno precedente)
	$togli_aggiungi=1;
	if((int)$set_primo >1){//è 52 o 53
		$togli_aggiungi=-1;
	}
	$num_gg_anno=$togli_aggiungi*(date("w", $primo_anno)-1);//giorni da togliere o aggiungere
	$partenza=$primo_anno-$num_gg_anno*(24*60*60);//lunedi della prima settimana dell'anno
	$primo_giorno=$partenza+$settimana*7*24*60*60;
	$ultimo_giorno=$primo_giorno+6*24*60*60;
	//sin qui le date sono tutte in timestamp
	$mese=array("","gennaio","febbreaio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","diccembre");
	$set[0]=date("d", $primo_giorno)." ".$mese[date("n",$primo_giorno)]." ".date("Y",$primo_giorno);
	$set[1]=date("d", $ultimo_giorno)." ".$mese[date("n",$ultimo_giorno)]." ".date("Y",$ultimo_giorno);
	return $set;
}
//******test******
$a=2016;
for($k=1;$k<53;$k++){
	$vedi=settimane($k,$a);
	echo "sett. $k va dal ".$vedi[0]." al ".$vedi[1]."<br />";
}
?>
se va bene o se devo cambiare qualcosa dimmelo
 

colomber

Utente Attivo
4 Dic 2012
232
1
18
C'é un'errore

visto che la prima settimana del 2016 dura meno di 4 giorni (Domenica é il 3 gennaio) questa settimana diventa la 53° del 2015, inizia il 28 dicembre 2015 e finisce il 3 gennaio 2016.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
dovrebbe essere a posto
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;//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 />";
}
?>
come al solito fai delle prove e avvisami
 
Discussioni simili
Autore Titolo Forum Risposte Data
L (risolto) MySQL 0
B getElementById su piu id(Risolto) Javascript 7
L Esercitarsi con Js [RISOLTO] Javascript 4
C [RISOLTO]Inserimento variabile php in input html PHP 20
L risolto visualizzazione e ordinamento dati PHP 1
moustache [RISOLTO] SQL PHP IIS PHP 8
Sergio Unia Ricezione email con destinatari multipli [Risolto] PHP 2
L update tabelle in php mysql [risolto] PHP 6
M Semplice visualizzatore di immagini [risolto con plugin wp] PHP 7
L [RISOLTO] Stampa a video risultato count in html PHP 13
L [RISOLTO] Eliminare una discussione creata PHP 3
tomorc [HTML] Problema con scroll bar (risolto) HTML e CSS 0
A [PHP] Problema query insert [RISOLTO] PHP 14
B [PHP] recuperare IP dei server in load balancing [RISOLTO] PHP 3
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
S [RISOLTO] aggiorna tabella da select option asp classic Classic ASP 7
elpirata [RISOLTO][Javascript] Datapicker e autocompletamento campo input Javascript 2
elpirata [RISOLTO][Mysql] Problema insert valori apostrofati MySQL 1
elpirata [RISOLTO][Mysql] Contare le occorrenze in un campo tipo varchar MySQL 2
G [MS Access] Gestione biglietti [RISOLTO] MS Access 2
G [MS Access] Casella combinata & Query [RISOLTO] MS Access 4
G [MS Access] Query mese corrente con conteggio [RISOLTO] MS Access 2
M [RISOLTO]Windows media player non mi funziona più su win 10 pro 64 bit Windows e Software 2
C [RISOLTO][PHP] Errore di sintassi PHP 8
IT9-Gpp [RISOLTO] Leggere variabile restituita da success Ajax 3
Kolop [RISOLTO][PHP] Problema Pagination PHP 2
C [RISOLTO][PHP] Funzione ONclick PHP 14
C [RISOLTO][PHP] Conteggio righe di una tabella PHP 4
N [PHP] Utilizzo variabili di sessione [Risolto] PHP 13
Tommy03 [RISOLTO][PHP] Webserver o devserver? PHP 2
Sergio Unia Recupero dati da una vecchia versione MySql [Risolto] MySQL 4
spider81man [PHP] Problemi cancellazione dato su DB [RISOLTO] PHP 1
A [RISOLTO]Inserimento Immagini da pc a MySql PHP 15
A [PHP] RISOLTO Invio Mail con Tabella PHP 2
felino Risolto - [Wordpress][WooCommerce] PayPal Checkout e campi di fatturazione WordPress 2
elpirata [PHP][RISOLTO] Sommare gli importi estratti da un ciclo while PHP 3
elpirata [PHP][RISOLTO] Effettuare la somma dei tempi di lavorazione PHP 3
elpirata [PHP] [RISOLTO]Sovrascrivere testo in una tabella PHP 2
A [RISOLTO]Recuperare dati inviati con json tramite php PHP 4
C [RISOLTO][PHP] Passaggio variabili senza refresh di pagina PHP 7
elpirata [PHP][RISOLTO] Errore di tipo Notice: Undefined index - Come risolvere quando si hanno tante var PHP 10
S Problema in PHP per invio file XML - RISOLTO- PHP 8
A [Javascript] [RISOLTO] Doppio "submit", in uno stesso "Form" , che puntino ad "action" diversi Javascript 1
marino51 [Risolto]videochat di messenger ha smesso di funzionare sul telefonino Smartphone e tablet 1
A [Javascript] [HTML] RISOLTO...Allungare un box all'apertura della pagina No Mouse over Javascript 9
ken_korn [Javascript][Risolto] browser.tab.Tabs.favIconUrl non funziona Javascript 5
A [RISOLTO] HighChart e PHP PHP 4
A [RISOLTO] PHP Selezionare tutti i file con stessa estensione PHP 2
A [RISOLTO] Table elaborata da codice PHP con dati da DB non visualizzata in IFRAME PHP 15
T [Photoshop] Problema creazione pennello personalizzato [RISOLTO] Photoshop 3

Discussioni simili