ho trovato una soluzione, posto qua il codice.

Allo stesso tempo ho anche trovato un bug, i mesi che iniziano di domenica non vengono visualizzati, e non riesco a capire il perchè

qualche idea?

Codice PHP:
//Trovo i dati fondamentali:
// Array con i giorni dei mesi
$dati['giorni_mesi'] =  array(31031303130313130313031); 
// Mese corrente ( numerico )
$dati['mese_num'] = date("n",  time()); 
// Mese Corrente ( testuale )
$dati['mese_text'] = date("F"time());
// Oggi ( numerico senza eventuali zeri ) 
$dati['oggi'] = date("j"time()); 
// Oggi ( nella settimana, numerico )
$dati['oggi_sett'] = date("w"time()); 
// Anno
$dati['anno'] = date("Y"time()); 
// Giorno della settimana del primo giorno dell'anno
$dati['start'] = date("w"mktime(0,0,0$dati['mese_num'], 1$dati['anno'])); 
// Calcolo dei giorni di febbraio
$dati['giorni_mesi'][1] = (($dati['mese_num']%400) == 0) ? 29 28
// Giorni del mese corrente
$dati['giorni_mese'] = $dati['giorni_mesi'][$dati['mese_num']-1]; 
// Settimane del mese corrente arrotondato per eccesso.
$dati['settimane_mese'] = ceil($dati['giorni_mese']/7); 

//
// Vi sarete accorti che:
// 1) Nel calcolo dei giorni del mese corrente c'è un -1: Questo è perchè l'array inizia da 0, non da 1
// 2) Ho arrotondato per eccesso il calcolo delle settimane: Per evitare giorni nascosti nell'ultima settimana
// 3) I giorni della settimana trovati da date() iniziano da 0 ( Domenica ) fino a 6 ( Sabato )
//

// Se il conteggio reale dei giorni può partire
$info['can_start'] = FALSE
// Giorni da accumulare
$info['to_less'] = 0

$text '
<style type="text/css">
table { border:1px solid black; }
td.cal_days { padding-left:35px; border:1px solid grey; }    
td { padding:10px; }
td { border:1px solid silver; } 
</style>
<div align="center">'
.$dati['mese_text'].'</div>
'
.
'<table align="center">
    <tr>
        <td class="cal_days">Lun</td>
        <td class="cal_days">Mar</td>
        <td class="cal_days">Mer</td>
        <td class="cal_days">Gio</td>
        <td class="cal_days">Ven</td>
        <td class="cal_days">Sab</td>
        <td class="cal_days">Dom</td>
    </tr>'
// Schema fisso dei giorni della settimana

//
// Ciclo madre: Continua per tutte le settimane del mese
//

for($ciclo 0$ciclo <= $dati['settimane_mese']; $ciclo++)
{
    
// Aggiungo una griglia
    
$text .= '<tr>'

    
// Ciclo Figlio ( SubCiclo ): Avanza per tutti i giorni della settimana
    
for($subciclo 1$subciclo <= 7$subciclo++)
    {
        
// Controllo se il ciclo può partire e se il giorno del ciclo figlio
        // corrisponde a quello della settimana del primo giorno del mese
        // Se tutti e due sono FALSE:
        
if($subciclo != $dati['start'] && $info['can_start'] == FALSE)
        {
            
// 1) Aggiungo una casella vuota
            
$text .= '<td class="cal_day"></td>'
            
// 2) Aggiungo un giorno da levare
            
$info['to_less']++; 

            
// 3) Faccio ricominciare il ciclo finchè uno dei due casi si riveli TRUE
            
continue; 
        }
        else
        {
            
// Muto il valore di can_start in TRUE
            
$info['can_start'] = TRUE
        }
        
        
//
        // Naturalmente solo uno dei due casi può rivelarsi TRUE: Solo ' $subciclo != $dati['start'] '
        // dato che can_start diverrà TRUE solo quando si avvererà la prima condizione. Così il conto può partire
        //
        // Ora mi calcolo il giorno corrente, Sommando il valore corrente della variabile di questo ciclo ai giorni
        // delle settimane trascorse ( Grazie alla moltiplizacione per 7 di $ciclo ) e levando infine i giorni
        // accumulati in precedenza. Vi ricordo che questo di seguito è la variabile contenente il giorno da mostrare,
        // non quello di oggi

        // Calcolo il giorno da mostrare
        
$dati['current_day'] = $subciclo+($ciclo*7)-$info['to_less']; 
        
        
// Controllo ci restano ancora giorni del mese
        
if($dati['current_day'] <= $dati['giorni_mese'])
        {
            
// Se si...
            //
            // Vorrete fare capire il giorno di oggi, no? Quindi cambiamo stile
            // alla cella in caso questa corrisponda a quella di oggi.
            //

            // Controllo se il giorno da mostrare è quello di oggi
            
if($dati['current_day'] == $dati['oggi']) 
            {
                
// Cambio stile in 'oggi' se è oggi
                
$tdclass 'oggi'
            } else {
                
// Cambio stile in 'Default' se non è oggi
                
$tdclass 'default'
            }

            
$empty_space "";
            if (
strlen($dati['current_day']) == 1)
            {
                
$empty_space "";
            }
            
            
// Poi aggiungo la cella
            
$text .= '<td class="'.$tdclass.'">'.$empty_space.$dati['current_day'].' <input type="text" size="4" maxlength="4" name='.$dati['current_day'].'-'.$dati['mese_num'].'/></td>'
        } 
        else
        {
            
// Se invece non ci restano più giorni del mese, faccio terminare il ciclo
            
break;
        }
        
        
// Finisce qui il SubCiclo, se ci sono ancora settimane da mostrare il ciclo continuerà, se no, si fermerà.
    
}

    
// Chiudo la griglia
    
$text .= '</tr>'
}

// Chiudo la tabella
$text .= '</table>'

echo 
$text;
?>