Jun
23
2010

Einführung in Zend_Date

Erst einmal will ich mich bei Nico für den super Artikel ZendX_JQuery Basics bedanken, finde es Klasse von Dir, dass du uns Unterstützt! :-)

Und jetzt zurück zum Thema ;-)
Da ich in der letzten Zeit viel mit der Zend_Date Komponente gearbeitet habe,
will ich euch heute mal die Basics der Komponente mit ein paar Beispielen vorstellen.

Die deutsche Dokumentation für die Zend_Date Komponente findet ihr wie für alle anderen Komponenten unter http://framework.zend.com/manual/de/

Bevor man datumsrelevante Funktionen verwendet, sollte man die Standard-Zeitzone definieren.
Dies kann mittels der date.timezone Einstellung in der php.ini geschehen oder wie wir es nun machen über die date_default_timezone_set() Funktion.

Standard-Zeitzone definieren:

// Zeitzone für Deutschland
date_default_timezone_set('Europe/Berlin');


Aktuelles Datum + Uhrzeit ausgeben:

$date = new Zend_Date();
echo $date;
// Ausgabe z.B.: 21.06.2010 22:26:26

Aus einem vorhandenen Datum ein Zend_Date Objekt erstellen:

$date = new Zend_Date('21.06.2010');
echo $date;
// Ausgabe: 21.06.2010 00:00:00

Aktuelles Datum + Uhrzeit anhand eines Musters ausgeben:

$date = new Zend_Date();
echo $date->get('dd.MM.yyyy');
// Ausgabe z.B.: 21.06.2010

echo $date->get('yyyy-MM-dd');
// Ausgabe z.B.: 2010-06-21

echo $date->get('HH:mm:ss');
// Ausgabe z.B.: 22:31:58

Zend_Date konstanten verwenden:
Es gibt natürlich noch viel mehr Konstanten für Zend_Date, eine Übersicht findet ihr hier in der Doku.

$date = new Zend_Date();

echo $date->get(Zend_Date::DATE_FULL);
// Ausgabe z.B.: Montag, 21. Juni 2010

echo $date->get(Zend_Date::DATE_LONG);
// Ausgabe z.B.: 21. Juni 2010

echo $date->get(Zend_Date::DATE_MEDIUM);
// Ausgabe z.B.: 21.06.2010

echo $date->get(Zend_Date::DATE_SHORT);
// Ausgabe z.B.: 21.06.10

echo $date->get(Zend_Date::DATETIME_MEDIUM);
// Ausgabe z.B.: 21.06.2010 22:54:26

echo $date->get(Zend_Date::DATETIME_SHORT);
// Ausgabe z.B.: 21.06.10 22:54

echo $date->get(Zend_Date::WEEKDAY);
// Ausgabe z.B.: Montag

echo $date->get(Zend_Date::MONTH_NAME);
// Ausgabe z.B.: Juni

echo $date->get(Zend_Date::TIMESTAMP);
// Ausgabe z.B.: 1277152620

Rechnen mit Zend_Date:

$date = new Zend_Date();

echo $date;
// Ausgabe z.B.: 21.06.2010 23:09:20

// + 1 Tag
echo $date->add(1, Zend_Date::DAY);
// Ausgabe z.B.: 22.06.2010 23:09:20

// + 1 Monat
echo $date->add(1, Zend_Date::MONTH);
// Ausgabe z.B.: 21.07.2010 23:09:20

// + 1 Jahr
echo $date->add(1, Zend_Date::YEAR);
// Ausgabe z.B.: 21.06.2011 23:09:20

// - 1 Tag
echo $date->sub(1, Zend_Date::DAY);
// Ausgabe z.B.: 20.06.2010 23:09:20

// - 1 Monat
echo $date->sub(1, Zend_Date::MONTH);
// Ausgabe z.B.: 21.05.2010 23:09:20

// - 1 Jahr
echo $date->sub(1, Zend_Date::YEAR);
// Ausgabe z.B.: 21.06.2009 23:09:20

Setzen einer bestimmten Zeit:

$date = new Zend_Date();
echo $date->set('12:00', Zend_Date::TIME_SHORT);
// Ausgabe z.B.: 21.06.2010 12:00:00

Zend_Date Objekt klonen:
Warum ein Zend_Date Objekt klonen?
Wenn man $clone einfach $date zuweisen würde und anschliessend $date ändert, ändert sich auch automatisch $clone.

$date = new Zend_Date();
$clone = $date->copyPart(Zend_Date::DATE_MEDIUM);
// $clone ist das geklonte Objekt von $date. Wobei nur der gewünschte Abschnitt $part ($date->copyPart($part)) des Datumsobjektes kopiert wird.

Vergleichen mit der Operation compare:

$date = new Zend_Date();
echo $date->compare('29.06.2010');
// Gibt 0 zurück wenn sie gleich sind, 1 wenn der Abschnitt dieses Objektes früher war als der 29.06.2010 und andernfalls -1.

Vergleichen von Daten:

$date = new Zend_Date('21.06.2010');
$date2 = new Zend_Date('22.06.2010');

// Prüfen ob das Datum1 gleich Datum2 ist
$date->equals($date2);
// Gibt true zurück wenn $date gleich $date2 ist, ansonsten false

// Prüfen ob das Datum1 früher Datum2 ist
$date->isEarlier($date2);
// Gibt true zurück wenn $date früher $date2 ist, ansonsten false

// Prüfen ob das Datum1 später Datum2 ist
$date->isLater($date2);
// Gibt true zurück wenn $date später $date2 ist, ansonsten false

Einzelne Daten zwischen einen Zeitraum ausgeben:

$from = new Zend_Date('29.06.2010');
$to = new Zend_Date('02.07.2010');
$dates = array();

do {
	$dates[] = $from->get(Zend_Date::DATE_MEDIUM);
	$from = $from->add(1, Zend_Date::DAY);
} while ($from<=$to);

// Im Array $dates würde jetzt folgendes stehen:
// Array
// (
//    [0] => 29.06.2010
//    [1] => 30.06.2010
//    [2] => 01.07.2010
//    [3] => 02.07.2010
// )

So, ich hoffe ich konnte euch die Basics von Zend_Date anhand der kleinen Beispiele
etwas nahe bringen.
Falls es Fragen gibt, schießt los ;-)

4 Kommentare Kommentar schreiben

  • Hey gerne doch! Wird sicherlich auch nicht der letzte gewesen sein.

  • Leider hast du vergessen, auch die Locale zu setzen oder zumindest zu erwähnen, iwe die Locale da mit reinspielt. Ansonsten finde ich den Artikel wirklich gelungen.

    Noch als Tipp: man kann auch zwei Zend_Date Objekte vergleichen ;)

  • Dennis Becker :

    Leider hast du vergessen, auch die Locale zu setzen oder zumindest zu erwähnen, iwe die Locale da mit reinspielt. Ansonsten finde ich den Artikel wirklich gelungen.

    Noch als Tipp: man kann auch zwei Zend_Date Objekte vergleichen ;)

    Hallo Dennis,
    danke für den Tipp ;-)
    Die Tage folgt noch ein extra Artikel über Zend_Locale :)

Kommentar schreiben