Simpler Kalender mit PHP

Hier ein kleines How-To, wie man mit PHP einen Simplen Kalender macht. In diesem Beispiel ohne grosse Einstellmöglichkeiten, aber das kann man auch im Nachhinein noch ganz gut ergänzen.
Der Kalender wird hier in einer HTML-Tabelle dargestellt, was im Normalfall die beste Lösung ist.

Ich möchte hier nicht allzuviele Worte verlieren, da ich denke, dass der Quelltext mit den Kommentaren verständlich genug sein sollte, aber den Ablauf möchte ich noch kurz erläutern:
Als erstes wir berchnet welches Wochentag der erste Tag im Monat hat und so werden wenn nötig die ersten leeren Zellen geschrieben. Wenn der erste Tag also ein Freitag ist werden 4 Zellen (Mo - Do) geschrieben. Nun werden die Tage des Monats geschrieben und immer nach sieben Tagen wird eine neue Zelle begonnen. Schlussendlich werden noch die restlichen Zellen bis zum Schluss des Monats geschrieben.

Das sieht dann so aus:
<?
echo "
<table border=\"1\" cellspacing=\"0\">
    <tr>
        <th>Mo</th>
        <th>Di</th>
        <th>Mi</th>
        <th>Do</th>
        <th>Fr</th>
        <th>Sa</th>
        <th>So</th>
    </tr>
    <tr>"
;
    
    
// monat bestimmen
$month=date("m");

// jahr bestimmen
$year=date("y");

// timestamp des ersten tages im monat
$ts=mkTime(0,0,0,$month,1,$year);

// anzahl der tage im monat
$days_of_month=date("t",$ts);

// erster tag im monat
// mo=0, di=1, ..., so=6
$first_day=date("w",$ts);
if(
$first_day==0)
{
    
$first_day=7;
}
$first_day--;

// der aktuelle wochentag
// mo=0, di=1, ..., so=6
$weekday=0;

// tage bis zum ersten tag auffuellen
for($i=0;$i<$first_day;$i++)
{
    
$weekday++;

    echo 
"
        <td>&amp;nbsp;</td>"
;
}

// wochentage schreiben
for($i=0;$i<$days_of_month;$i++)
{
    
// neue zeile nach sonntag
    
if($weekday==7)
    {
        echo 
"\n    </tr><tr>";
        
$weekday=0;
    }
    
$weekday++;

    
// aktueller tag hervorheben
    
if(intVal($i+1)==intVal(date("d")) AND intVal($month)==intVal(date("m")) AND intVal($year)==intVal(date("y")))
    {
        echo 
"
        <td style=\"background-color:#f0f0f0;\">"
.($i+1)."</td>";
    }
    else
    {
        echo 
"
        <td>"
.($i+1)."</td>";
    }
}


// tage bis zum letzen tag auffuellen
for($i=$weekday;$i<7;$i++)
{
    echo 
"
        <td>&amp;nbsp;</td>"
;

    
$weekday++;
}

// tabelle abschliessen
echo "
    </tr>
</table>"
;
?>

Kommentieren

Name:
Mail:
Homepage:
9+7=? (Spamschutz)