Buonasera a tutti, sono nuovo di PHP e mi trovo davanti ad una cosa per cui stò diventando matto.

Devo visualizzare a video un calendario, quindi far partire il conteggio dei giorni dal lunedì prima del 1 primo del mese considerato e farlo finire la domenica dopo l'ultimo giorno.

Stò utilizzando date('w',$giorno) per sapere in quale giorno della settimana sono e comportarmi di conseguenza.

Il problema è il mese di marzo, non so per quale motivo tutti i mesi di marzo (e solo in quelli) il conteggio finisce il sabato e non la domenica.

Di seguito allego il codice, non viene visualizzata la tabella ma passo tutto ad un javascript che poi mi deve riempire un div in un'altra pagina.

codice:
$valore.="<table cellspacing=\"0\" cellpadding=\"0\" style=\"width:560px;text-align:left;\" class=\"testo\">";
    if($_GET["t"]==0){
        $valore.=vistaMese();
    } else {
        $valore.=vistaSettimana();
    }
    $valore.="</table>";


    echo "<script type=\"text/javascript\">\r\n";
    echo "parent.pag.div_agenda.innerHTML='".$valore."';\r\n";
    echo "</script>";

    //FUNZIONI
    //VISTA MESE
     function vistaMese(){
        $val ="<tr>";
        $val.="<td class=\"tCaleM\">Luned&igrave;</td>";
        $val.="<td class=\"tCaleM\">Marted&igrave;</td>";
        $val.="<td class=\"tCaleM\">Mercoled&igrave;</td>";
        $val.="<td class=\"tCaleM\">Gioved&igrave;</td>";
        $val.="<td class=\"tCaleM\">Venerd&igrave;</td>";
        $val.="<td class=\"tCaleM\">Sabato</td>";
        $val.="<td class=\"tCaleM\">Domenica</td>";
        $val.="</tr>";
        $mese=$_GET["m"]+1;
        $anno=$_GET["a"];
        $giorno=strtotime($anno."-".$mese."-1");

        $gds=date('w',$giorno)-1;
        if($gds==-1)
            $gds=6;

        $giorno=mktime(0,0,0,$mese,1-$gds,$anno);

        $ultimo=mktime(0,0,0,$mese+1,1,$anno);
        $gds=(8-date('w',$ultimo))%7;
        $ultimo=mktime(0,0,0,$mese+1,$gds,$anno);
        $i=1;
        while($giorno<=$ultimo){
            $val.=scriviGiornoMese($giorno, $mese);
            $giorno+=86400;
            if($i%7==0)
                $val.="</tr><tr>";
            $i++;
        }
        $val.="</tr>";
        return $val;
     }

     //CELLA DELLA TABELLA
     function scriviGiornoMese($giorno, $mese){
        $classe="cellaCale";
        if ($mese!=(int)date('m',$giorno))
            $classe="cellaCaleD";
        $val="<td class=\"".$classe."\">";
        $val.=(int)date('d', $giorno);
        $val.="</td>";

        return $val;
     }
    //FINE FUNZIONI
Grazie per l'aiuto