Zend_Date
unterstützt viele verschiedene Wege, um eine neue Instanz
von sich selbst zu erstellen. Da es verschiedene Notwendigkeiten gibt, werden die bequemsten
Wege in diesem Kapitel gezeigt.
Der einfachste Weg der Erstellung eines Datumsobjektes ist es, ein aktuelles Datum zu
erstellen. Man kann entweder eine neue Instanz mit new Zend_Date()
erstellen oder die bequemere statische Methode Zend_Date::now()
verwenden, wobei beide das aktuelle Datum als neue Instanz von
Zend_Date
zurückgeben. Das aktuelle Datum enthält immer das
Datum und die Zeit der aktuell gesetzten Zeitzone.
Beispiel 165. Datum durch Instanz erstellen
Datumserstellung durch Erzeugen einer neuen Instanz bedeutet, dass man keinen
Parameter angeben muß. Natürlich gibt es mehrere Parameter, die später beschrieben
werden. Normalerweise ist das jedoch der einfachste und meist genutzte Weg, um das
aktuelle Datum als Zend_Date
Instanz zu erhalten.
$date = new Zend_Date();
Beispiel 166. Statische Erstellung eines Datums
Machmal ist es einfacher, eine statische Methode für die Erstellung eines Datums zu
verwenden. Hierfür kann die now()
Methode verwendet werden. Sie gibt eine neue Instanz von
Zend_Date
auf die gleiche Art und Weise zurück, wie wenn man
new Zend_Date() verwenden würde. Es wird aber immer das aktuelle
Datum zurückgegeben. Dieses Verhalten kann auch nur durch die Angabe von optionalen
Parametern geändert werden.
$date = Zend_Date::now();
Datenbanken werden oft verwendet, um Datumswerte zu speichern. Das Problem ist dabei,
dass jede Datenbank Ihre Datumswerte in einer anderen Form ausgibt.
MsSQL Datenbanken verwenden eine etwas andere Standardausgabe von
Datumswerten als MySQL Datenbanken. Zur Vereinfachung macht es
Zend_Date
sehr simpel ein Datum von einem Datumswert einer
Datenbank zu erstellen.
Natürlich kann jeder Datenbank mitgeteilt werden, dass diese die Ausgabe einer definierten Spalte in einen speziellen Wert konvertiert. Zum Beispiel können ein datetime Wert so konvertiert werden, dass ein Minutenwert ausgegeben wird. Aber das benötigt viel Zeit und oft müssen Datumswerte auf eine andere Art und Weise bearbeitet werden, als bei der Erstellung der Datenbankabfrage gedacht wurde.
Deswegen gibt es einen schnellen und einen bequemen Weg ein Datum von Datenbankwerten zu erstellen.
Beispiel 167. Schnelle Erstellung eines Datums von Datumswerten einer Datenbank
Von allen Datenbanken ist bekannt, dass Abfragen so schnell wie möglich bearbeitet werden. Sie wurden erstellt um schnell zu arbeiten und zu antworten. Der schnellste Weg um Datumswerte zu bearbeiten ist es aus der Datenbank UNIX Timestamps zu erhalten. Alle Datenbanken speichern Datumswerte intern als Timestamps (nicht UNIX Timestamps). Das bedeutet, dass die Zeit für die Erstellung eines Timestamps durch eine Abfrage viel kleiner ist, als die Konvertierung in ein spezielles Format.
// SELECT UNIX_TIMESTAMP(my_datetime_column) FROM my_table $date = new Zend_Date($unixtimestamp, Zend_Date::TIMESTAMP);
Beispiel 168. Bequeme Erstellung eines Datums von Datumswerten einer Datenbank
Die Standardausgabe von allen Datenbanken ist leicht unterschiedlich, selbst wenn
diese auf den ersten Blick gleich aussehen. Aber alle sind Teil des
ISO Standards und durch diesen beschrieben. Deshalb liegt der
einfachste Weg ein Datum zu erstellen, in der Verwendung von
Zend_Date::ISO_8601
. Datenbanken, von denen bekannt ist, dass
diese durch Zend_Date::ISO_8601
erkannt werden, sind zum
Beispiel MySQL und MsSQL. Aber alle
Datenbanken können eine ISO-8601 Repräsentation von Datumsspalten
ausgeben. ISO-8601 hat den großen Vorteil, dass es menschlich
lesbar ist. Der Nachteil ist, dass ISO-8601 mehr Zeit zur
Berechnung benötigt, als ein einfacher UNIX Timestamp. Es soll auch erwähnt werden
das UNIX Timestamps nur für Datumswerte nach dem 1. Januar 1970 unterstützt werden.
// SELECT datecolumn FROM my_table $date = new Zend_Date($datecolumn, Zend_Date::ISO_8601);
Datumswerte können auch durch die Verwendung eines Arrays erstellt werden. Das ist ein einfacher und leichter Weg. Die verwendeten Array Schlüssel sind:
day: Tag des Datums als Zahl
month: Monat des Datums als Zahl
-
year: Vollständiges Jahr des Datums
hour: Stunde des Datums
minute: Minute des Datums
second: Sekunde des Datums
Beispiel 169. Erstellen eines Datums durch ein Array
Normalerweise wird ein komplettes Datumsarray für die Erstellung einer neuen Instanz des Datums angegeben werden. Wenn nicht alle Werte angegeben werden, werden die nicht angegebenen Arraywerte genullt. Das bedeutet, dass wenn z.B. keine Stunde angegeben wird, die Stunde 0 verwendet wird.
$datearray = array('year' => 2006, 'month' => 4, 'day' => 18, 'hour' => 12, 'minute' => 3, 'second' => 10); $date = new Zend_Date($datearray);
$datearray = array('year' => 2006, 'month' => 4, 'day' => 18); $date = new Zend_Date($datearray);