siccome non parli mai a vuoto.... mi hai fatto venire un dubbio anzi due. Visto che la serata e' uggiosa faccio qualche prova.Originariamente inviato da luca200
Occhio.
Se il 1° gennaio è mercoledì o giovedì, il primo martedì dell'anno è nella settimana 2.
Intanto vorrei precisare che utilizzando quasi esclusivamente mysql per le date mentalmente avevo la presenza di piu' modi di gestire la settimana dell'anno. Il php pare ne abbia uno solo.
Dato questa premessa, credo di capire che le settimane con il php iniziano sempre di lunedi' e possono essere da 1 a 53. Quindi la funzione che ho postato sopra conta i vari martedi' dell'anno partendo da un indice 1 ad un max di 53 senza tener conto della settimana "W" ma in un mero ordine cronologico. Potrebbe quindi dare risultati inattesi a seconda di come viene iniziato a contare la settimana dell'anno interessato.
da un controllo con mktime si trovano alcune collisioni a livello settimana-anno.
esempio:
sett. 01 2007-01-01 Monday
sett. 01 2007-12-31 Monday
sett. 52 2011-01-01 Saturday
sett. 52 2011-12-31 Saturday
e poi, l'inizio anno da Monday a Thursday e' sempre sett. 01 mentre
Friday, Saturday e Sunday sono sempre settimana 52 o 53 dell'anno precedente:
Sett. 01 2003-01-01 Wednesday
Sett. 01 2009-01-01 Thursday
Sett. 53 2010-01-01 Friday
Sett. 52 2011-01-01 Saturday
Sett. 52 2012-01-01 Sunday
Quindi se il mese di gennaio di un qualsiasi anno inizia di Lunedi', martedi', mercoledi', giovedi' sara' la settimana 01 dell'anno corrente, mentre se inzia di venerdi', sabato o domenica questi giorni apparterranno all'ultima settimana dell'anno precedente.
Dato questo postulato lo switch per la ricerca del martedi' di una qualsiasi settimana dell'anno deve essere rivisto e sostituito con questo che segue:
fermo restando tutto il resto. La collisione possibile di due valori "settimana" identici ad inizio e fine anno con questa funzione non dovrebbe causare equivoci.Codice PHP:
// calcolo il valore del martedi' della settimana 01
if($w == 0) { $z = 3; } // domenica
elseif($w == 1) { $z = 2; } // lunedi'
elseif($w == 2) { $z = 1; } // martedi'
elseif($w == 3) { $z = -1; } // mercoledi'
elseif($w == 4) { $z = -2; } // giovedi
else { $z = 10 - $w; } // venerdi e sabato