Newsgroup: it.comp.www.php
Titolo: problemuccio con i numeri settimana

se dico che siamo nella 51 settimana dell'anno 2002 vorrei che php mi
dicesse datainizio e datafine di questa settimana e
viceversa del tipo:
anno 2005 settimana 2  --->   datainit: 03/01/2005  datafine 09/01/2005
oppure
datainit: 03/01/2005  datafine 09/01/2005     --->anno 2005 (questo era
facile :-)  settimana N.2
aiuto!!!!
grazie
ciao
max

 ha scritto nel messaggio
news:fA5I9.51222$qF1.2...@news2.tin.it...

Ecco qua il frutto delle mie fatiche...
Ci ho messo un bel po' e ho fatto un po' di fumo dal cranietto ma...
Uso due array che riempio di valori facendo "girare" tutti i giorni
dell'anno e acchiappando i lunedě.
Forse c'č una soluzione migliore (c'č quasi sempre una soluzione
migliore!!!),
 ma questa č efficace.
a presto
Marcello
<?php
//Imposto lo 0 come vuoto in due array
$lunedi=array(0=>'');
$domenica=array(0=>'');
//ciclo per i mesi
for($m=1;$m<=12;$m++)
{
     // e all'interno ciclo per i giorni
     for ($d=1;$d<=31;$d++)
    {
      // calcola i giorni...
      $giorno_ini = date("d/m/Y",mktime (0,0,0,$m,$d,date("Y")));
      $giorno_fine = date("d/m/Y",mktime (0,0,0,$m,$d+6,date("Y")));
      $giorno_settimana = date("w",mktime (0,0,0,$m,$d,date("Y")));
      //se il giorno della settimana č lunedě lo mette nell'array $lunedi e
$giorno+6 nell'array $domenica
      if ($giorno_settimana==1)
          {$lunedi[]=$giorno_ini;
            $domenica[]=$giorno_fine;}
     }
 }
 //ecco pronti due array con etichetta  pari al numero settimana!
print_r($lunedi);
echo "<hr>";
print_r($domenica);
echo "<hr>";
//ad esempio ecco le date relative alla 48esima settimana del corrente anno.
$num_settimana=48;
echo "La settimana $num_settimana del ".date("Y")." inizia il
$lunedi[$num_settimana] e finisce il $domenica[48].";
?>

anno 2005 settimana 2  --->   datainit: 03/01/2005  datafine 09/01/2005
Ti puo' aiutare la funzione date(), che ritorna anche il numero della
settimana (almeno lo fa su Unix, e se non lo fa gli si fa fare facile
usando date::dow(), che so per certo che c'e').
Sapendo che la settimana N-esima e' di sicuro compresa fra il secondo
86400*(7*(N-1)-2) e 86400*(7*(N+1)-2) a partire dal primo gennaio, ti
puoi tabulare la settimana ed il giorno della settimana di quel primo
istante; diciamo che e' la settimana N-1 e che e' il giorno 4; allora
sai che devi aggiungere (7-4)*86400 secondi e hai trovato il lunedi'.
Qualcosa come (non ho controllato ALCUNA SINTASSI: caveat emptor)
	// Script tremendo vile
	$inizio1 = mktime(1,1,2005)+86400*(7*($N-1));
	$inizio1 += 86400*date('w', $inizio1);
 
	$inizio  = date('d-m-Y', $inizio1);
	$fine    = date('d-m-Y', $inizio1 + 6.9 * 86400);
Leonardo

 aiuto!!!!
Pesco dal mio archivio di pagine utili alcune cose che troverai
interessanti a proposito della prima settimana dell'anno:
http://home.t-online.de/home/PeterJHaas/DateTime/wncen.htm
http://www.cl.cam.ac.uk/~mgk25/iso-time.html
http://tech.irt.org/articles/js146/
Questo e' un programma interessante sui calendari:
http://www.dynamical-systems.org/kal/
buon lavoro
Marco Bernardini
##-----------------------------------------------##
         Articolo inviato tramite MyNewsGroups :)
 
http://mynewsgroups.sourceforge.net
         Condividi le tue conoscenze in...it.comp.www.php
##-----------------------------------------------##

  ma questa č efficace.
Grazie veramente e complimenti!
Ciao
max

 ha scritto nel messaggio
news:o843vuoarff9t0nkl...@L.Serni...
