Laravel 4: Datum und Zeit mit Carbon lokalisieren (Update: Zeichensatz angeben)

Meine Vorliebe für das PHP-Framework Laravel habe ich ja schon in dem ein oder anderen Artikel zum Ausdruck gebracht.

In einem aktuellen Projekt musste ich wie so oft eine Menge an Datensätzen auflisten. Diese enthielten auch Datumsangaben die ich aber nicht auf englisch, sondern auf deutsch wollte.

Wie nun das umsetzen?

Nach einigem Suchen habe ich einen Weg gefunden dieses Problem auf sehr leichte und schöne Art und Weise mit Laravel-eigenen Mitteln zu lösen, sogar ohne den bisherigen Code zu beeinflussen.

Alias anlegen

Carbon ist im Prinzip eine API für das php-eigene DateTime, das uns einige nützliche Funktionen liefert. Carbon wird mit Laravel 4 bereits mitgeliefert und kann über \Carbon\Carbon  auch verwendet werden. Wer Carbon oft einsetzen will fügt am besten der config/app.php einen Alias hinzu und kann von da an einfach über Carbon  auf die Klasse zugreifen. Alternativ can man sie auch per  use Anweisung vor die Deklaration von Klassen angeben, die Carbon verwenden werden. Ich habe mich für den Alias entschieden:

TimeZone festlegen

Damit php weiß in welcher Sprache es die Zeitangaben ausgeben soll, müssen wir zwei-drei Einstellungen setzen. Nicht alle sind zwingend notwenig, aber sie sind sinnvoll. Zuerst in config/app.php:


Nun müssen wir noch irgendwo per php-Funktion setlocale()  angeben, welche Sprache verwendet wird. Ich habe das in bootstrap/start.php direkt am Anfang gemacht, andere Orte sind aber denkbar.

Carbon

Die Verwendungsmöglichkeiten von Carbon sind vielfältig. Die Dokumentation ist hier sehr hilfreich. Ein paar Beispiele von dort:

Datum- und Zeit-Felder in Models definieren

Damit wir nicht in den Views oder Models tausend neue Methoden schreiben müssen kann man Laravel ganz einfach anweisen für jedes Feld mit Zeitangabe  ein entsprechendes Carbon-Objekt zurückzugeben. Hierzu definiert man im Model eine $dates -Variable und listet darin die Felder auf:


Nun gibt Laravel im View beim Auslesen der Felder entsprechend ein Carbon-Objekt aus:


Da Carbon über die __toString -Methode den „normalen“ DateTime Code ausgibt, konnte ich alle meine Views die diesen schon anders verarbeiteten erstmal unberührt lassen, ohne dass Fehler entstehen.

Lokalisierte Datums- und Zeitangaben im View erstellen

Nun müssen wir nur noch im View das Datum ausgeben. Hierzu stellt Carbon u.a. die Funktion formatLocalized()  zur Verfügung:


Jetzt erhalten wir tatsächlich eine Ausgabe wie wir sie wollen. Natürlich kann man dazu noch die Wochentage usw. ausgeben. Die nötige Hilfe findet man in der php-strftime-Dokumentation.

Fazit

Wenn auch etwas versteckt bietet Larvel jede Menge nützliche Funktionen um Datums- und Zeitangaben zu verwenden. Carbon ist hier ein mächtiges Werkzeug, das in diesem Artikel nur ansatzweise vorgestellt wurde. Viel mehr ist möglich: Das anpassen von Zeitangaben an die Zeitzone des angemeldeten Users zB. oder die Verwendung von „lesbaren“ Zeitangaben wie „vor 3 Minuten.“ Ein Blick in die entsprechende Dokumentation von Carbon eröffnet hier viele Möglichkeiten.

Zusatz: Zeichensatz beachten!

Wenn es zu Darstellungsproblemen mit irgendwelchen ? kommt bei Monatsnamen wie „März“ usw kann man über set_locale  auch noch einen Zeichensatz angeben:


 

2 Antworten auf „Laravel 4: Datum und Zeit mit Carbon lokalisieren (Update: Zeichensatz angeben)“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.