Um bevorstehende Termine übersichtlich auf einer Website darstellen zu können eignet sich ein Kalender ziemlich gut. Wie man diesen programmieren könnte, möchte ich im folgenden zeigen.
Um die Kalenderausgabe für einen bestimmten Monat in einem bestimmten Jahr auszugeben, wird der Code in eine Funktion geschrieben.
function ShowCalendar($ShowMonth, $ShowYear)
{
}
Benötige Variablen erstellen
Der anzuzeigende Monat und das anzuzeigende Jahr werden als Funktionparameter geholt. Danach müssen noch der aktuelle Tag, die Anzahl der Tage im Monat sowie die Anzahl der Wochen im Monat bestimmt werden. Außerdem wird noch ein Array benötigt, in das die einzelnen Tage später geschrieben werden.
$NowDay = date("d", time());
$DaysInMonth = date("t", mktime(1, 0, 0, $ShowMonth, 1, $ShowYear));
$WeeksInMonth = date("W", mktime(1, 0, 0, $ShowMonth, $DaysInNowMonth, $ShowYear)) - date("W", mktime(1, 0, 0, $ShowMonth, 1, $ShowYear)) + 1;
$CalData = array();
Array füllen
Zuerst werden so viele Elemente in das Array eingefügt, wie der Monat Wochen hat.
for($a = 0; $a < $WeeksInMonth; $a++)
{
$CalData[] = array();
}
Dann wird jede Woche im Array mit den entsprechenden Tagen gefüllt. Dabei wird für jeden Tag bestimmt, der wievielte Tag der Woche es ist, und dieser wird dann an entsprechender Stelle in die Woche eingefügt. Da date(“w”, $timestamp) allerdings den Sonntag als Tag Nr. 0 und den Samstag als Tag Nr. 6 zurück liefert, müssen der Sonntag als Nr. 6 festgelegt und alle anderen zurückgegebenen Werte um 1 verringert werden.
Und immer, wenn das Skript beim sechsten Tag der Woche angelangt ist, wird der Wochenzähler um 1 erhöht, wodurch dann die nächste Woche gefüllt wird.
$w = 0;
for($i = 1; $i <= $DaysInMonth; $i++)
{
$Day = date("w", mktime(1, 0, 0, $ShowMonth, $i, $ShowYear));
($Day == 0) ? $Day = 6 : $Day--;
$CalData[$w][$Day] = $i;
if($Day == 6)
{
$w++;
}
}
Monate auf Deutsch
Damit die Monate dann auch auf Deutsch angezeigt werden, wir dein Array mit den deutschen Bezeichnungen angelegt.
$Months = array(0 => "Januar",
1 => "Februar",
2 => "März",
3 => "April",
4 => "Mai",
5 => "Juni",
6 => "Juli",
7 => "August",
8 => "September",
9 => "Oktober",
10 => "November",
11 => "Dezember");
Die Ausgabe des Kalenders
Der Tabellenkopf
Für den Tabellenkopf müssen erst einmal Monat und Jahr entsprechend formatiert werden.
echo <<<DOC
<table>
<tr>
<th colspan="7">
$Month_Year_formatted
</th>
</tr>
<tr>
<th>Mo</th>
<th>Di</th>
<th>Mi</th>
<th>Do</th>
<th>Fr</th>
<th>Sa</th>
<th>So</th>
</tr>
DOC;
Der Inhalt – das Array auslesen
Nun wird für jedes Wochenelement im Array eine Zeile angelegt und für jeden Tag in dieser Zeile eine Zelle angelegt und am Ende die Tabelle geschlossen.
foreach($CalData as $Week)
{
echo "<tr>";
for($wd = 0; $wd <= 6; $wd++)
{
if(mktime(1, 0, 0, $ShowMonth, $Week[$wd], $ShowYear) == mktime(1, 0, 0, date("m", time()), $NowDay, date("Y", time())))
{
// CSS-Klasse Cal_Today: .Cal_Today { border: 1px #000000 solid; }
echo "<td class='Cal_Today'>$Week[$wd]</td>";
}
else
{
echo "<td>$Week[$wd]</td>";
}
}
echo "</tr>";
}
echo "</table>";
So könnte der Kalender beispielsweise am Ende aussehen:

Das gesamte PHP-Skript steht hier zum Download bereit.
Man könnte nun noch eine Blätter-Funktion hinzufügen. Eine Möglichkeit diese zu implementieren ist im Download-Skript mit enthalten.
Share on Facebook