Mit der WordPress-Funktion date_i18n() lässt sich ein Datum einfach ins richtige Format bringen. Hier die wichtigsten Parameter zur Datums-Formatierung.
Ich muss ziemlich häufig mit Terminen arbeiten – also zum Beispiel Veranstaltungen, die natürlich chronologisch sortiert ausgegeben werden sollen und die dann das Datum und die Uhrzeit der jeweiligen Veranstaltung je nach Anforderung sauber formatiert ausgeben sollen. Die Formatierung ist bei fast jedem Projekt anders, die Funktionen sind natürlich immer wieder dieselben. Trotzdem muss ich jedes mal eine kleine Recherche anstellen – und das nervt. Also habe ich mir hier einen weiteren kleinen feinen Spickzettel gebastelt, auf dem das Wichtigste zum Thema „Datum in WordPress richtig formatieren“ zusammengefasst ist.
Die WordPress-Funktion date_i18n
Die WordPress-Funktion date_i18n() funktioniert im Prinzip genau so, wie die PHP-Funktion date() – mit der hilfreichen Ausnahme, dass Wochentag und Monat gleich lokalisiert, also entsprechend der aktuell ausgewählten Sprache übersetzt werden.
Damit das reibungslos funktioniert muss das Datum zunächst mal als Datumsstempel vorliegen. Im Prinzip kann man mit Hilfe der Funktion strtotime aus vielen unterschiedlichen Datumsformaten einen Datummstempel generieren lassen. Ich benutze grundsätzlich das Format „Ymd h:i“, da das zum Beispiel bei Sortier- und Filterfunktionen im Rahmen von Datenbankabfragen (WP_Query) hilfreich ist. Bei Datumsfeldern bzw. kombinierten DatumUhrzeitFeldern, die mit ACF erstellt wurden, lässt sich das problemlos entsprechend einstellen. (Hier die Seite zur Funktion date_i18n() bei developer.wordpress.org)
Also holen wir uns erstmal das Datum aus der Datenbank:
$my_date = get_field('my_date');
Dann müssen wir das Datum in einen Datumsstempel umwandeln:
$my_date = strtotime($my_date);
Datum wie gewünscht formatieren
Dann können wir das Datum wie gewünscht formatieren.
Hier die aus meiner Sicht wichtigsten Parameter zur Formatierung:
- d Tag des Monats mit vorangestellter Null (01, 02, 03, … )
- j Tag des Monats ohne vorangestellte Null (1, 2, 3, …)
- D Wochentag, abgekürzt auf 3 Lettern (Mon, Die, Mit)
- l Wochentag voll ausgeschrieben (Montag, Dienstag, Mittwoch, …)
- N Numerische Ausgabe des Wochentags nach ISO-8601 (1 = Montag, 2 = Dienstag, …)
- w Numerische Darstellung eines Wochentags (0 = Montag, 1 = Dienstag, …)
- M Name des Monats, abgekürzt auf 3 Lettern (Jan, Feb, Mrz)
- F Name des Monats, voll ausgeschrieben (Januar, Februar, März, …)
- m Numerische Darstellung eines Monats; mit vorangestellter Null (01, 02, 03, …)
- n Numerische Darstellung eines Monats; ohne vorangestellte Null (1, 2, 3, …)
- Y Vollständige viertellige Jahrszahl (1999, 2020, -0815)
- G Stunde im 24-Stunden-Format; ohne vorangestellte Null (1, 2, 3, …)
- h Stunde im 12-Stunden-Format; mit vorangestellter Null
- i Minuten; mit vorangestellter Null
- t Anzahl der Tage des angegebenen Monats (28, 29, 30, 31)
Die Formatierung ist m.W.n, identisch mit der Formatierung der PHP Funktion date(). Hier alle Möglichkeiten zur Formatierung eine Datums mit oder ohne Uhrzeit auf php.net: https://www.php.net/manual/de/datetime.format.php
In einer Zeile zusammengefasst sieht das dann zum Beispiel so aus:
$my_date_output = date_i18n('j. F Y',strtotime($my_date));
Das Ergebnis würde in diesem Fall also das Datum wie folgt formatiert ausgeben:
3. Septemper 2023
Inkonsistenz bei kurzen bzw. gekürzten Monatsnamen März, Juni und Juli
Neu: mit einem der letzten Updates hat sich ein Detail an der WordPress-Datumsfunktion geändert. Um es kurz zu machen: der bisher auf auf 3 Lettern abgekürzte Name des Monats wird zumindest in der Deutschen Fassung nun bei den Monaten März, Juni und Juli voll ausgeschrieben.
Erschwerend kommt hinzu, dass an den auf 3 Buchstaben abgekürzen Monten automatisch ein Punkt angehängt wird – den ausgeschriebenen Monaten hingegen nicht. Das mag zwar logisch sein, ist für Gestalter und Webdesigner aber ein Graus.
Folgende Code-Schnippsel können Abhilfe schaffen:
Zunächst müssen wir den Monat in eine separate Variable laden. Der Vollständigkeit halber laden wir das Datum des Tages sowie die Jahreszahl ebenfalls in eine eigene Variable.
$my_date_output_d = date_i18n('j',strtotime($my_date)); $my_date_output_m = date_i18n('M',strtotime($my_date)); $my_date_output_y = date_i18n('Y',strtotime($my_date));
Dann müssen wir den Punkt nach dem gekürzten Monatsnamen entfernen und die Namen der Monate März, Juni und Juli ersetzen – denn diese werden ansonsten nun voll ausgeschrieben.
$my_date_output_m = rtrim($my_date_output_m,'.'); $my_date_output_m = str_replace('März','Mrz',$my_date_output_m); $my_date_output_m = str_replace('Juni','Jun',$my_date_output_m); $my_date_output_m = str_replace('Juli','Jul',$my_date_output_m);
Anschließend setzen wir das Datum wieder zusammen:
$my_date_output = $my_date_output_d.'. '.$my_date_output_m.' '.$my_date_output_y;
Somit haben wir zum Beispiel folgende Fälle vereinheitlicht:
- 1. Jan. 2025 –> 1. Jan 2025 (Punkt entfernt)
- 1. März 2025 –> 1. Mrz 2025 (Name des Monats gekürzt)
Und fertig ist die Hütte. 🙂