15.102014

Carbon ein Ersatz für DateTime

Im Zusammenhang mit Zeit- und Datumsoperationen gibt es sicherlich den einen oder anderen Entwickler, der Funktionen selber schreiben musste, da PHP mit DateTime nicht das gewünschte liefern konnte. Für alle, die schon einmal vor diesem Problem standen, kann die PHP-Klasse Carbon ein nützlicher Helfer sein.Carbon? Dem einen oder anderen ist es ggf. eher als Werkstoff ein Begriff, aber hier möchte ich viel lieber die PHP-Klasse Carbon vorstellen, die von DateTime ableitet.

Zuerst einmal gibt es zwei Arten, wie man die Klasse in sein bestehendes Projekt einbinden kann.

Falls das eigene Projekt mit Composer arbeitet, dann muss in der composer.json nur das entsprechende Require aufgenommen werden:

{
    "require": {
        "nesbot/Carbon": "*"
    }
}

und mittels php composer.phar install installiert man dann die Klasse. Um sie dann nutzen zu können, fügt man nur noch dies in seinem Projekt hinzu:

<?php
require 'vendor/autoload.php';
use Carbon\Carbon;

Bei der zweiten Variante kopiert man von Hand die Carbon.php Klassendatei in sein Projekt und fügt dies in seinem Projekt hinzu:

<?php
require 'PATH/TO/Carbon.php';
use Carbon\Carbon;

Nun ist zumindest die Klasse Carbon schonmal bekannt und um mit ihr arbeiten zu können, müssen wir uns noch ein neues Objekt der Klasse erstellen.

Dies funktioniert fast wie mit DateTime, bloß dass Carbon anstelle eines Timestamps einen Datumstring erwartet. Zum Beispiel in diesem Format '2014-10-15', oder wenn es der aktuelle Zeitpunkt sein soll, dann steht auch die statische Methode 'now()' zur Verfügung.

$dt = Carbon::now();

Neben der Methode 'now()' gibt es noch 'yesterday()', 'tomorrow()' oder 'today()'. Diese Methoden verwenden als Uhrzeit immer '00:00:00'.

Für all diejenigen, die gerne die Operationen als fluid method calls schreiben, gibt es auch hier eine Lösung. Carbon bietet die Methode 'parse()' an. Das ganze schaut dann wie folgt aus

echo Carbon::parse('2014-10-15')->addHours(12);

Es ist also sehr leicht, Zeiten zu addieren oder subtrahieren. Auch bietet die Klasse spezielle Setter und Getter, um direkt Teile des Timestamps zu manipulieren.

Des Weiteren kennt die Klasse noch viele kleine Helfermethoden, mit deren Hilfe man ein Datum überprüfen kann. Hier mal eine kurze Auflistung:

$dt = Carbon::now();
$dt->isWeekday();
$dt->isWeekend();
$dt->isYesterday();
$dt->isToday();
$dt->isTomorrow();
$dt->isFuture();
$dt->isPast();
$dt->isLeapYear();
$dt->isSameDay(Carbon::now());

Die Möglichkeiten sind also umfangreich. Eine weitere Möglichkeit ist das Arbeiten mit Zeitzonen. Dazu übergibt man einfach als Parameter beim'now()' die gewünschte Zeitzone:

$dt = Carbon::now('Europe/Berlin');
$dt2 = Carbon::now('Europe/London');

 

Wer mehr über Carbon erfahren möchte, kann ja mal bei Github https://github.com/briannesbitt/Carbon vorbeischauen und sich über die umfangreichen weiteren Möglichkeiten informieren.