phpBuddy

Webhosting Gutscheine

Auf der Suche nach einem top Provider? Dann lohnt ein Blick auf diesen Artikel - Gutscheine zum Geld sparen gibt's inklusive!

Sie sind hier: Startseite Wochentage und Monate mit Name ausgeben
Wochentage und Monate mit Name ausgeben

Wochentage und Monate mit Name ausgeben

Manchmal kommt man in die Situation in der man anhand eines Datums den Wochentag oder den Monat als Name ausgeben möchte. Wenn man Pech hat ergoogelt man sich ein Tutorial, wie ich es vorhin durch Zufalls beim Streifzug durch's Web gesehen habe und wie es schlechter kaum geht - und sowas nannte sich Tutorial. *schauder*
Da wurde ein Datum aus der Datenbank gelesen, das ein typisches amerikanisches Format hatte YYYY-MM-DD HH:MM:ss. Anschließend wurde das Datum mit substr "zerlegt" -verstümmelt wäre das treffendere Wort- um an den Monat zu kommen. (Schon mal was von explode gehört, lieber Tutorialschreiber?) Die so gewonnen Monatszahl wurde dann an ein if-elseif Konstrukt übergeben das seines Gleichen suchte (selbst eine Switch wäre hier sinnvoller gewesen), um den Monatsnamen anhand der Zahl zu ermitteln. Voller Stolz fragte der Tutorialschreiber zum Schluss, ob das nicht echt einfach war.

Nein, das war ganz und gar nicht einfach! Es war grottenschlecht, umständlich, extrem unperformant und der Code aufgrund seiner Länge sehr schwer nachvollziehbar. Vielleicht liest der andere Tutorialschreiber ja hier zufällig mal mit, damit er sich das gleich folgende Beispiel zu Gemüte führen kann, das doch erheblich einfacher, performanter und eleganter ist.


Zuerst das komplette Listing
und anschließend gibt's die Erklärung dazu. Der Code sollte aber leicht zu verstehen sein, da wir im Prinzip nur ein Array und die date Funktion von PHP benötigen.

// Array mit den Namen der Wochentage
$tagnamen = array
(
    1 =>
    'Monatg',
    'Dienstag',
    'Mittwoch',
    'Donnerstag',
    'Freitag',
    'Samstag',
    'Sonntag',
);
 
// Array mit den Namen der Monate
$monatsnamen = array
(
    1 =>
    'Januar',
    'Februar',
    'März',
    'April',
    'Mai',
    'Juni',
    'July',
    'August',
    'September',
    'Oktober',
    'November',
    'Dezember',
);
 
// Zeitstempel eines Datums, z.B. ermittelt mit UNIX_TIMESTAMP() aus einer MySQL Datenbank
$zeitstempel = time();
 
// Numerischen Wert von Tag ermitteln
$tag = date( "N", $zeitstempel );
// Tagname aus Array ausgeben
echo "<p>" . $tagnamen[$tag] . "</p>";
 
// Numerischen Wert von Monat ermitteln
$monat = date( "n", $zeitstempel );
// Monatsname aus Array ausgeben.
echo "<p>" . $monatsnamen[$monat] . "</p>";

Hier gibt es also 2 einfache Arrays, eins für die Wochentage und eins für die Monate. Da wir nicht möchten das der erste Index die 0 (Null) ist, initialisieren wir die Arrays mit "1 =>". Dies ähnelt einer Zuordnung eines assoziativen Arrays, allerdings wird es hier verwendet um das Array bei 1 und nicht bei 0 zu starten. Man kann für ein Array auch jede andere Zahl als Startwert festlegen. So würde etwa "37 =>" das Array bei Index 37 starten, ein Zugriff auf 0 bis 36 ist nicht möglich, da diese Indizes nicht existieren.

Als nächstes Benötigen wir einen Zeitstempel. Falls ein Datum des weiter oben beschrieben Formats ausgelesen wird, können wir das Datum-Feld in UNIX_TIMESTAMP wrappen, wodurch uns MySQL einen Zeitstempel des Datums liefert - man muss hier also kein Datum zerlegen oder ähnliches. Eine etwas ausführlichere Einleitung zum Thema Datums- und Zeitfunktionen von MySQL findet man ebenfalls auf dieser Seite.

Diesen ermittelten Zeitstempel übergeben wir an die Funktion date und lassen uns den Wochentag (N) oder Monat (n) als numerischen Wert zurück liefern. Diese Zahl entspricht 1 (Montag) bis 7 (Sonntag) für Tage und 1 (Januar) bis 12 (Dezember) für Monate. Jetzt dürfte dem Ein oder Anderen auch klar sein, wieso wir unsere Arrays beim Index 1 gestartet haben. ;-)
Wir sprechen nun direkt den Array Index an, der dem Tag/Monat entspricht und lassen uns so dessen Wert, den Name, ausgeben.

Wie zu sehen ist, müssen wir nicht mit dem zerlegen des Datums kämpfen. Wir benötigen auch keine zusätzlichen Funktionen oder endlose if-elseif Konstrukte. Ein einfaches Array und die Funktion date reichen vollkommen aus, um an's Ziel zu kommen. Diesen "Trick" mit dem Array kann man in der Praxis ziemlich häufig einsetzen. Fast immer dann, wenn wir eine Zahl mit einem String assoziieren möchten, aber auch, wenn man mit Abkürzungen arbeitet. In dem Fall benutzt man dann eben ein assoziatives Array.


Bis zum nächsten Kurztipp,
phpBuddy

Beispiel herunterladen (1 kB)