| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: 20766 -->
- <sect1 id="zend.date.overview">
- <title>Zend_Date API Übersicht</title>
- <para>
- Obwohl die <acronym>API</acronym> von <classname>Zend_Date</classname> simpel und einheitlich
- ist, ist dessen Design aufgrund der reichhaltigen Permutationen von
- Operationen und Operanden flexibel und mächtig.
- </para>
- <sect2 id="zend.date.options">
- <title>Zend_Date Optionen</title>
- <sect3 id="zend.date.options.formattype">
- <title>Auswahl der Art des Datumsformats</title>
- <para>
- Viele Methoden benutzen Zeichenketten für Datumsformate so ähnlich wie
- <methodname>date()</methodname> von <acronym>PHP</acronym>. Wenn man mit den Zeichen
- der Datumsformaten von <acronym>PHP</acronym> mehr Erfahrung hat als mit den
- <acronym>ISO</acronym>-Zeichen für Formate, dann kann man
- <methodname>Zend_Date::setOptions(array('format_type' => 'php'))</methodname>
- benutzen. Danach können die Zeichen von <acronym>PHP</acronym> für Datumsformate für alle
- Funktionen verwendet werden, die einen <varname>$format</varname>-Parameter
- akzeptieren. Durch Benutzen von
- <methodname>Zend_Date::setOptions(array('format_type' => 'iso'))</methodname> kann
- man wieder auf den Standardmodus zurückwechseln, der nur <acronym>ISO</acronym>-Zeichen
- für Datumsformate unterstützt. Für eine Liste von unterstützten Zeichencodes
- kann hier nachgelesen werden: <link
- linkend="zend.date.constants.phpformats">selbst definierte AUSGABE-Formate bei
- Verwendung der date()-Formatzeichen von PHP</link>
- </para>
- </sect3>
- <sect3 id="zend.date.options.fixdst">
- <title>Sommer-/Winterzeit und Datumsberechnungen</title>
- <para>
- Wenn Daten manipuliert werden, überschreiten sie manchmal die <acronym>DST</acronym>-Grenze
- (Sommer-/Winterzeit), was normalerweise dazu führt, dass das Datum eine Stunde
- verliert oder hinzubekommt. Wenn zum Beispiel ein Monat zu einem Datum vor einer
- <acronym>DST</acronym>-Änderung hinzugefügt wird und der Ergebnismonat nach dieser
- Änderung liegt, sieht es so aus, als ob das Datum durch den Wert des geänderten Datums
- eine Stunde verliert oder hinzubekommt. Für Grenzstunden wie Mitternacht,
- für den ersten oder letzten Tag eines Monats, führt das Hinzufügen von genügend
- Monaten dazu, dass das Datum eine Stunde verliert, wenn die <acronym>DST</acronym>-Grenze
- überschritten wird und damit zum letzten Tag des Vormonats wird, was den Anschein
- eines "eins fehlt" Fehlers erweckt. Um diese Situationen zu vermeiden, kann
- die <acronym>DST</acronym>-Änderung durch Verwendung der
- Option <property>fix_dst</property> ignoriert werden. Wenn eine
- <acronym>DST</acronym>-Grenze überschritten wird, wird ja normalerweise abhängig
- vom Datum eine Stunde hinzugefügt oder entfernt. Zum Beispiel führt eine
- Datumsberechnung mit <acronym>DST</acronym> im Frühling zu einem Datum, welche einen
- Tag weniger hat als erwartet, wenn die Zeit des Originaldatums 00:00:00 war. Da
- <classname>Zend_Date</classname> auf Zeitstempeln basiert und nicht auf Kalenderdaten
- mit Zeitkomponenten, verliert der Zeitstempel eine Stunde, was zu einem Datum führt, das
- einen Kalendertag weniger hat, als erwartet. Um solche Problem zu verhindern, kann die
- Option <property>fix_dst</property> verwendet werden, welche standardmäßig
- <constant>TRUE</constant> ist. Das führt dazu, dass die <acronym>DST</acronym> keinen
- Einfluss mehr bei Datumsberechnungen hat (<methodname>addMonth()</methodname>,
- <methodname>subMonth()</methodname>).
- <methodname>Zend_Date::setOptions(array('fix_dst' => false))</methodname> kann
- benutzt werden, um Hinzufügen oder Entfernen der <acronym>DST</acronym>-Anpassung zu
- gestatten, wenn Datumsberechnungen durchgeführt werden.
- </para>
- <para>
- <emphasis>Wenn die aktuelle Zeitzone innerhalb der Instanz von
- <classname>Zend_Date</classname> auf <acronym>UTC</acronym> oder
- <acronym>GMT</acronym> gestellt ist, wird die Option '<property>fix_dst</property>'
- nicht verwendet</emphasis>, weil diese zwei Zeitzonen nicht mit
- <acronym>DST</acronym> arbeiten. Wenn die Zeitzone für diese Instanz wieder auf eine
- Zeitzone gestellt wird, die nicht <acronym>UTC</acronym> oder <acronym>GMT</acronym>
- ist, wird die vorher definierte Option 'fix_dst' wieder für die Datumsberechnungen
- verwendet.
- </para>
- </sect3>
- <sect3 id="zend.date.options.extendmonth">
- <title>Monatsberechnungen</title>
- <para>
- Wenn Monate zu einem existierenden Datum hinzugefügt oder davon entfernt werden, kann der
- Ergebniswert des Monatstages unerwartet sein, wenn das Originaldatum auf einen Tag
- gefallen ist, der Nahe am Ende des Monats ist. Wenn zum Beispiel ein Monat zum 31sten
- Jänner hinzugefügt wird, werden Personen, welche mit <acronym>SQL</acronym> vertraut
- sind, den 28sten Februar als Ergebnis erwarten. Auf der anderen Seite werden Personen,
- welche mit Excel und OpenOffice vertraut sind, den 3ten März als Ergebnis
- erwarten. Das Problem besteht nur, wenn der Ergebnismonat den Tag nicht hat,
- der im Originaldatum gesetzt war. Zend Framework Entwickler können das gewünschte
- Verhalten beeinflussen, indem die Option <property>extend_month</property> genutzt
- wird, die bei einem Wert von <constant>FALSE</constant> das
- <acronym>SQL</acronym>-Verhalten, oder bei einem Wert von <constant>TRUE</constant>
- das Tabellenverhalten auswählt. Das Standardverhalten für
- <property>extend_month</property> ist <constant>FALSE</constant>, um
- <acronym>SQL</acronym>-kompatibles Verhalten zu erlauben.
- <classname>Zend_Date</classname> führt Monatsberechnungen standardmäßig in der Art
- durch, dass Daten auf das Monatsende hin abgeschnitten werden (wenn notwendig), ohne
- dass in den nächsten Monat umgebrochen wird, wenn das Originaldatum einen Monatstag
- bestimmt, der die Anzahl der Tage des Ergebnismonats überschreitet.
- <methodname>Zend_Date::setOptions(array('extend_month' => true))</methodname> kann
- benutzt werden, um Monatsberechnungen wie in populären Tabellenkalkulationen
- durchzuführen.
- </para>
- </sect3>
- <sect3 id="zend.date.options.cache">
- <title>
- Lokalisierung und Normalisierung von Daten mit Zend_Cache schneller machen
- </title>
- <para>
- Man kann <classname>Zend_Date</classname> schneller machen, indem ein
- <classname>Zend_Cache</classname>-Adapter verwendet wird. Das verschnellert alle
- Methoden von <classname>Zend_Date</classname>, wenn lokalisierte Daten verwendet
- werden. Zum Beispiel werden alle Methoden hiervon profitieren, welche
- <constant>Zend_Date::DATE</constant> und <constant>Zend_Date::TIME</constant>
- Konstanten akzeptieren. Um einen
- <classname>Zend_Cache</classname>-Adapter für <classname>Zend_Date</classname> zu
- verwenden, muss nur
- <methodname>Zend_Date::setOptions(array('cache' => $adapter))</methodname>
- aufgerufen werden.
- </para>
- </sect3>
- <sect3 id="zend.date.options.timesync">
- <title>Syncronisierte Zeiten mit Zend_TimeSync erhalten</title>
- <para>
- Normalerweise unterscheiden sich die Uhren von Servern und Computern voneinander.
- <classname>Zend_Date</classname> ist dazu fähig, solche Probleme mit Hilfe von
- <classname>Zend_TimeSync</classname> zu handhaben. Mit
- <methodname>Zend_Date::setOptions(array('timesync' => $timeserver))</methodname>
- kann ein Zeitserver gesetzt werden, welcher den Unterschied zwischen dem eigenen
- aktuellen Zeitstempel und dem wirklichen aktuellen Zeitstempel für alle Instanzen von
- <classname>Zend_Date</classname> setzt. Die Verwendung dieser Option ändert nicht
- den Zeitstempel von bestehenden Instanzen. Am besten ist es also, dies innerhalb der
- Bootstrap-Datei zu setzen.
- </para>
- </sect3>
- </sect2>
- <sect2 id="zend.date.values">
- <title>Arbeiten mit Datumswerten</title>
- <para>
- Sobald die Eingabe durch die Erstellung eines <classname>Zend_Date</classname>-Objekts
- normalisiert wurde, hat es eine zugeordnete Zeitzone aber die interne Darstellung
- verwendet <ulink
- url="http://en.wikipedia.org/wiki/Unix_Time">UNIX-Zeitstempel</ulink>. Damit ein
- Datum in einer lokalisierten Art und Weise durchsucht werden kann, muss zuerst eine
- Zeitzone bekannt sein. Die Standardzeitzone ist immer <acronym>GMT</acronym> oder
- <acronym>UTC</acronym>. Um die Zeitzone des Objekts zu inspizieren, kann
- <methodname>getTimeZone()</methodname> verwendet werden. Um die Zeitzone des Objekts zu
- wechseln, kann <methodname>setTimeZone()</methodname> verwendet werden. Alle Änderungen
- des Objekts sind immer relativ zu seiner Zeitzone zu sehen.
- </para>
- <para>
- Man sollte es vermeiden, Teile von Datumsobjekten mit unterschiedlichen Zeitzonen
- zu mischen oder zu vergleichen, da dies grundsätzlich unerwartete Resultate zeigen kann,
- es sei denn, die Manipulationen beziehen sich nur auf den [UNIX-]Zeitstempel. Das Arbeiten mit
- <classname>Zend_Date</classname>-Objekten, die unterschiedliche Zeitzonen haben,
- funktioniert grundsätzlich, abgesehen davon wie vorher erwähnt, da Daten bei der
- Instantiierung von <classname>Zend_Date</classname> zu
- <acronym>UNIX</acronym>-Zeitstempel normalisiert werden.
- </para>
- <para>
- Die meisten Methoden erwarten eine Konstante für die Auswahl des gewünschten Teils
- <varname>$part</varname> des Datums, wie z.B. <constant>Zend_Date::HOUR</constant>.
- Diese Konstanten sind für alle unten angeführten Funktionen gültig. Eine Liste aller
- vorhandenen Konstanten wird hier beschrieben: <link
- linkend="zend.date.constants.list">Liste aller Konstanten</link>. Wenn
- <varname>$part</varname> nicht spezifiziert wird, wird
- <constant>Zend_Date::TIMESTAMP</constant> angenommen. Alternativ kann ein
- benutzerdefiniertes Format für <varname>$part</varname> verwendet werden, mit Hilfe der
- gleichen Mechanismen und Formatdefinitionen wie bei <link
- linkend="zend.locale.date.normalize"><methodname>Zend_Locale_Format::getDate()</methodname></link>.
- Wenn ein Datumsobjekt durch Verwendung eines offensichtlich falschen Datums
- erstellt wird (z.B. wenn die Nummer des Monats größer als 12 ist), wird <classname>Zend_Date</classname>
- eine Ausnahme werfen, solange kein spezielles Datumsformat ausgewählt wurde, das heißt,
- <varname>$part</varname> ist entweder <constant>NULL</constant> oder
- <constant>Zend_Date::DATES</constant> (ein "fehlertolerantes" Format).
- </para>
- <example id="zend.date.values.example-1">
- <title>Benutzerdefinierte Eingabeformate für Daten</title>
- <programlisting language="php"><![CDATA[
- $date1 = new Zend_Date('Feb 31, 2007', null, 'en_US');
- echo $date1, "\n"; // Ausgabe "Mar 3, 2007 12:00:00 AM"
- $date2 = new Zend_Date('Feb 31, 2007', Zend_Date::DATES, 'en_US');
- echo $date2, "\n"; // Ausgabe "Mar 3, 2007 12:00:00 AM"
- // Stikte Interpretation des angegebenen Formats
- $date3 = new Zend_Date('Feb 31, 2007', 'MM.dd.yyyy');
- echo $date3, "\n"; // Ausgabe "Mar 3, 2007 12:00:00 AM"
- ]]></programlisting>
- </example>
- <para>
- Wenn der optionale Parameter <varname>$locale</varname> angegeben wird, dann
- macht <varname>$locale</varname> den <varname>$date</varname>-Operand durch
- Ersetzen der Monatsnamen und Wochentagsnamen für die Zeichenkette
- <varname>$date</varname> eindeutig und sogar Datumszeichenketten können gemäß den
- Konventionen dieses Gebietsschemas analysiert werden (siehe <link
- linkend="zend.locale.date.normalize">Zend_Locale_Format::getDate()</link>).
- Die automatische Normalisierung von lokalisierten <varname>$date</varname>-Angaben einer
- Zeichenkette werden nur dann durchgeführt wenn für <varname>$part</varname> eine der
- Konstanten <constant>Zend_Date::DATE</constant>* oder <constant>Zend_Date::TIME</constant>*
- verwendet wird. Das Gebietsschema identifiziert die Sprache, welche verwendet
- werden soll, um Monatsnamen und Wochentagsnamen zu analysieren, wenn
- <varname>$date</varname> eine Zeichenkette ist, die ein Datum enthält. Wenn der
- Eingabeparameter <varname>$date</varname> nicht angegeben wurde, dann definiert der
- Parameter <varname>$locale</varname> das Gebietsschema für lokalisierte Ausgaben (z.B.
- das Datumsformat für eine Ausgabe als Zeichenkette). Anzumerken ist auch, dass der
- Parameter <varname>$date</varname> stattdessen ein Typname sein kann (z.B.
- <varname>$hour</varname> für <methodname>addHour()</methodname>) wobei das nicht verhindert,
- dass ein <classname>Zend_Date</classname> Objekt als Argument für diesen
- Parameter angegeben werden kann. Wenn <varname>$locale</varname> nicht angegeben wurde,
- wird das Gebietsschema des aktuellen Objekts genommen, um <varname>$date</varname> zu
- interpretieren oder das lokalisierte Format für die Ausgabe auszuwählen.
- </para>
- <para>
- Seit Zend Framework 1.7.0 unterstützt <classname>Zend_Date</classname> auch die
- Verwendung eines anwendungsweiten Gebietsschemas. Man kann ganz einfach eine
- <classname>Zend_Locale</classname>-Instanz in der Registry setzen wie hier gezeigt. Mit
- dieser Schreibweise braucht man sich nicht um das manuelle Setzen eines Gebietsschemas für jede Instanz
- zu kümmern, wenn man dasselbe Gebietsschema mehrere Male verwenden will.
- </para>
- <programlisting language="php"><![CDATA[
- // In der Bootstrap-Datei
- $locale = new Zend_Locale('de_AT');
- Zend_Registry::set('Zend_Locale', $locale);
- // Irgendwo in der eigenen Anwendung
- $date = new Zend_Date('31.Feb.2007');
- ]]></programlisting>
- </sect2>
- <sect2 id="id.date.basic">
- <title>Grundsätzliche Zend_Date Operationen für die meisten Teile von Daten</title>
- <para>
- Die Methoden <methodname>add()</methodname>, <methodname>sub()</methodname>,
- <methodname>compare()</methodname>, <methodname>get()</methodname> und
- <methodname>set()</methodname> arbeiten generell mit Daten. In jedem Fall wird die
- Operation auf dem Datum durchgeführt, das in der Objektinstanz vorhanden ist. Der
- <varname>$date</varname> Operand wird für alle diese Methoden benötigt, außer für
- <methodname>get()</methodname> und kann eine <classname>Zend_Date</classname>
- Objektinstanz, eine numerische Zeichenkette oder ein Integer sein. Diese Methoden
- nehmen an, dass <varname>$date</varname> ein Zeitstempel ist, wenn es kein Objekt ist.
- Trotzdem kontrolliert der <varname>$part</varname> Operand, an welchem logischen Teil
- der zwei Daten gearbeitet werden soll, was Arbeiten an Teilen von Daten des Objekts
- erlaubt, wie Jahr oder Minute, selbst wenn <varname>$date</varname> eine lange Form
- einer Datumszeichenkette enthält wie "Dezember 31, 2007 23:59:59". Das Ergebnis der
- Operation ändert das Datum im Objekt außer bei <methodname>compare()</methodname> und
- <methodname>get()</methodname>.
- </para>
- <example id="zend.date.basic.example-1">
- <title>Arbeiten an Teilen von Daten</title>
- <programlisting language="php"><![CDATA[
- $date = new Zend_Date(); // $date's Zeitstempel === time()
- // Ändert $date durch addieren von 12 Stunden
- $date->add('12', Zend_Date::HOUR);
- print $date;
- ]]></programlisting>
- </example>
- <para>
- Es existieren Komfortmethoden für jede Kombination von Grundoperationen und viele normale
- Datumsabschnitte wie in der unten stehenden Tabelle gezeigt. Diese Komfortmethoden erlauben uns
- faulen Programmierern zu vermeiden, dass die <link
- linkend="zend.date.constants.list">Konstanten für Datumsabschnitte</link>
- ausgeschrieben werden müssen. Bequemerweise sind sie benannt durch Kombination eines
- Prefixes (Name der Basisoperation) und einem Suffix (Art des Datumsabschnittes), wie
- <methodname>addYear()</methodname>. In der unten stehenden Liste existieren alle
- Kombinationen von "Datumsabschnitten" und "Basisoperationen". Zum Beispiel die
- Operation "add" existiert für jeden dieser Datumsabschnitte wie
- <methodname>addDay()</methodname>, <methodname>addYear()</methodname> und viele mehr.
- </para>
- <para>
- Diese Komfortmethoden haben eine gleichwertige Funktionalität wie die Methoden für
- die Basisoperationen, aber sie erwarten <varname>$date</varname>-Operanden vom
- Typ Zeichenkette oder Integer, welche nur die Werte enthalten, die durch den Typ
- definiert sind, der durch das Suffix der Methode definiert wurde. Deshalb identifizieren
- diese Methoden (z.B. "Year" oder "Minute") die Einheit des <varname>$date</varname>
- Operanden, wenn <varname>$date</varname> eine Zeichenkette oder ein Integer ist
- </para>
- <sect3 id="id.date.basic.parts">
- <title>Liste der Datumsabschnitte</title>
- <table id="id.date.basic.parts.table">
- <title>Datumsabschnitte</title>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Datumsabschnitt</entry>
- <entry>Erklärung</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <ulink
- url="http://en.wikipedia.org/wiki/Unix_Time">Zeitstempel</ulink>
- </entry>
- <entry>
- UNIX-Zeitstempel, ausgedrückt in Sekunden die vergangen sind seit dem
- 1. Jänner, 1970 00:00:00 <acronym>GMT</acronym>.
- </entry>
- </row>
- <row>
- <entry>
- <ulink
- url="http://en.wikipedia.org/wiki/Gregorian_calendar">Jahr</ulink>
- </entry>
- <entry>Gregorianisches Kalenderjahr (z.B. 2006)</entry>
- </row>
- <row>
- <entry>
- <ulink
- url="http://en.wikipedia.org/wiki/Month#Julian_and_Gregorian_calendars">Monat</ulink>
- </entry>
- <entry>
- Gregorianisches Kalendermonat (1-12, Lokalisierte Namen werden
- unterstützt)
- </entry>
- </row>
- <row>
- <entry>
- <ulink url="http://en.wikipedia.org/wiki/24-hour_clock">24 Stunden
- Uhr</ulink>
- </entry>
- <entry>
- Stunde des Tages (0-23) bezeichnet die vergangenen Stunden seit dem
- Beginn des Tages
- </entry>
- </row>
- <row>
- <entry>
- <ulink url="http://en.wikipedia.org/wiki/Minute">Minute</ulink>
- </entry>
- <entry>
- Minuten der Stunde (0-59) bezeichnet die vergangenen Minuten seit
- dem Beginn der Stunde
- </entry>
- </row>
- <row>
- <entry>
- <ulink url="http://en.wikipedia.org/wiki/Second">Sekunde</ulink>
- </entry>
- <entry>
- Sekunde der Minute (0-59) bezeichnet die vergangenen Sekunden seit
- dem Beginn der Minute
- </entry>
- </row>
- <row>
- <entry>
- <ulink url="http://en.wikipedia.org/wiki/Millisecond">Millisekunde</ulink>
- </entry>
- <entry>
- Millisekunden bezeichnen Tausendstel einer Sekunde (0-999).
- <classname>Zend_Date</classname> unterstützt zwei zusätzliche
- Methoden für das Arbeiten mit Zeiteinheiten, die kleiner als Sekunden
- sind. Normalerweise verwenden <classname>Zend_Date</classname>
- Instanzen eine Genauigkeit, welche der von Millisekunden entspricht
- wie man durch <methodname>getFractionalPrecision()</methodname>
- sehen kann. Um die Genauigkeit zu ändern, kann
- <methodname>setFractionalPrecision($precision)</methodname>
- verwendet werden. Trotzdem ist die Genauigkeit praktisch auf
- Millisekunden begrenzt, da <classname>Zend_Date</classname> <ulink
- url="http://php.net/microtime">microtime()</ulink> dafür
- benutzt.
- </entry>
- </row>
- <row>
- <entry>
- <ulink url="http://en.wikipedia.org/wiki/Day">Tag</ulink>
- </entry>
- <entry>
- <constant>Zend_Date::DAY_SHORT</constant> wird von
- <varname>$date</varname> extrahiert, wenn der
- Operand <varname>$date</varname> eine
- <classname>Zend_Date</classname>-Instanz oder eine numerische
- Zeichenkette ist. Sonst wird versucht, den Tag gemäß den
- dokumentierten Konventionen für diese Konstanten zu extrahieren:
- <constant>Zend_Date::WEEKDAY_NARROW</constant>,
- <constant>Zend_Date::WEEKDAY_NAME</constant>,
- <constant>Zend_Date::WEEKDAY_SHORT</constant>,
- <constant>Zend_Date::WEEKDAY</constant> (Gregorianischer Kalender
- angenommen)
- </entry>
- </row>
- <row>
- <entry>
- <ulink url="http://en.wikipedia.org/wiki/Week">Woche</ulink>
- </entry>
- <entry>
- <constant>Zend_Date::WEEK</constant> wird von
- <varname>$date</varname> extrahiert, wenn der
- Operand <varname>$date</varname> eine Instanz von
- <classname>Zend_Date</classname> oder eine numerische Zeichenkette
- ist. Sonst wird eine Ausnahme geworfen. (Gregorianischer Kalender
- angenommen)
- </entry>
- </row>
- <row>
- <entry>Datum</entry>
- <entry>
- <constant>Zend_Date::DAY_MEDIUM</constant> wird aus
- <varname>$date</varname> extrahiert wenn der
- Operand <varname>$date</varname> eine Instanz von
- <classname>Zend_Date</classname> ist. Sonst wird versucht, den
- <varname>$date</varname>-String des Datums in ein
- <constant>Zend_Date::DATE_MEDIUM</constant>-formatiertes Datum zu
- normalisieren. Das Format von
- <constant>Zend_Date::DATE_MEDIUM</constant> hängt vom Gebietsschema
- des Objekts ab.
- </entry>
- </row>
- <row>
- <entry>Wochentage</entry>
- <entry>
- Wochentage werden numerisch dargestellt von 0 (für Sonntag) bis 6
- (für Samstag). <constant>Zend_Date::WEEKDAY_DIGIT</constant> wird
- aus <varname>$date</varname> extrahiert wenn der
- Operand <varname>$date</varname> eine Instanz von
- <classname>Zend_Date</classname> oder eine numerische Zeichenkette
- ist. Sonst wird versucht, den Tag gemäß den dokumentierten
- Konventionen für diese Konstanten zu extrahieren:
- <constant>Zend_Date::WEEKDAY_NARROW</constant>,
- <constant>Zend_Date::WEEKDAY_NAME</constant>,
- <constant>Zend_Date::WEEKDAY_SHORT</constant>,
- <constant>Zend_Date::WEEKDAY</constant> (Gregorianischer Kalender
- angenommen)
- </entry>
- </row>
- <row>
- <entry>Tag des Jahres</entry>
- <entry>
- In <classname>Zend_Date</classname> wird der Tag des Jahres als
- Anzahl der Kalendertage dargestellt, die seit dem Start des Jahres
- vergangen sind (0-365). Wie bei den anderen oben dargestellten
- Einheiten, werden Bruchteile auf die nächste ganze Zahl abgerundet.
- (Gregorianischer Kalender angenommen)
- </entry>
- </row>
- <row>
- <entry>
- <ulink url="http://www.faqs.org/rfcs/rfc822.html">Arpa</ulink>
- </entry>
- <entry>
- Arpa-Daten (bzw. <acronym>RFC</acronym> 822 formatierte Daten) werden
- unterstützt. Die Ausgabe verwendet entweder "GMT" oder "Laut
- Gebietsschema unterschiedliche Stunden + Minuten" Format (siehe
- Sektion 5 von <acronym>RFC</acronym> 822). Vor
- <acronym>PHP</acronym> 5.2.2, zeigte die Verwendung der
- <constant>DATE_RFC822</constant> Konstante mit
- <acronym>PHP</acronym> date-Funktionen hier und da
- <ulink url="http://bugs.php.net/bug.php?id=40308">fehlerhafte
- Ergebnisse</ulink>. Die Ergebnisse von
- <classname>Zend_Date</classname> sind korrekt. Beispiel:
- Mon, 31 Dec 06 23:59:59 <acronym>GMT</acronym>
- </entry>
- </row>
- <row>
- <entry>
- <ulink url="http://en.wikipedia.org/wiki/ISO_8601">Iso</ulink>
- </entry>
- <entry>
- Für die Ausgabe werden nur vollständige <acronym>ISO</acronym> 8601
- Daten unterstützt. Beispiel: 2009-02-14T00:31:30+01:00
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect3>
- <sect3 id="id.date.basic.operations">
- <title>Liste der Datums-Operationen</title>
- <para>
- Die unten aufgeführten Basisoperationen können statt den Komfortoperationen für
- spezielle Datumsabschnitte verwendet werden, wenn die <link
- linkend="zend.date.constants.list">entsprechenden Konstanten</link> für
- den Parameter <varname>$part</varname> verwendet werden.
- </para>
- <table id="id.date.basic.operations.table">
- <title>Basisoperationen</title>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Basisoperationen</entry>
- <entry>Erklärung</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><methodname>get()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>get($part = null, $locale =
- null)</methodname></emphasis>
- </para>
- <para>
- <methodname>get($part)</methodname> kann benutzt werden, um einen
- Datumsabschnitt <varname>$part</varname> dieses Datumsobjekts,
- welcher in ein Gebietsschema von <varname>$locale</varname>
- lokalisiert oder als formatierte Zeichenkette oder Integer
- gewünscht ist zurück zu bekommen. Durch Verwendung der BCMath
- Erweiterung können numerische Zeichenketten statt Integer für
- große Werte zurückgegeben werden.
- </para>
- <note>
- <title>Verhalten von get()</title>
- <para>
- Anders als <methodname>get()</methodname> geben die anderen
- get*()-Komfortmethoden nur Instanzen von
- <classname>Zend_Date</classname> zurück, welche nur das Datum
- oder die Zeit repräsentieren, das ausgewählt oder berechnet
- wurde.
- </para>
- </note>
- </entry>
- </row>
- <row>
- <entry><methodname>set()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>set($date, $part = null, $locale =
- null)</methodname></emphasis>
- </para>
- <para>
- Setzt den Abschnitt <varname>$part</varname> des aktuellen
- Objekts übereinstimmend mit dem Wert, der für diesen Abschnitt
- in der Eingabe <varname>$date</varname> und im Gebietsschema
- <varname>$locale</varname> gefunden wurde.
- </para>
- </entry>
- </row>
- <row>
- <entry><methodname>add()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>add($date, $part = null, $locale =
- null)</methodname></emphasis>
- </para>
- <para>
- Addiert den Abschnitt <varname>$part</varname> von
- <varname>$date</varname>, welcher im Gebietsschema
- <varname>$locale</varname> geschrieben ist, zum Datum des
- aktuellen Objekts.
- </para>
- </entry>
- </row>
- <row>
- <entry><methodname>sub()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>sub($date, $part = null, $locale =
- null)</methodname></emphasis>
- </para>
- <para>
- Subtrahiert den Abschnitt <varname>$part</varname> von
- <varname>$date</varname>, welcher im Gebietsschema
- <varname>$locale</varname> geschrieben ist, vom Datum des
- aktuellen Objekts.
- </para>
- </entry>
- </row>
- <row>
- <entry><methodname>copyPart()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>copyPart($part, $locale =
- null)</methodname></emphasis>
- </para>
- <para>
- Gibt ein geklontes Objekt zurück, wobei nur der gewünschte
- Abschnitt <varname>$part</varname> des Datumsobjekts kopiert
- wird und im Klon das Gebietsschema von
- <varname>$locale</varname> gesetzt wird (wenn angegeben).
- </para>
- </entry>
- </row>
- <row>
- <entry><methodname>compare()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>compare($date, $part = null, $locale =
- null)</methodname></emphasis>
- </para>
- <para>
- Vergleicht den Abschnitt <varname>$part</varname> des Datums
- <varname>$date</varname> mit dem Zeitstempel des Objekts. Gibt 0
- zurück, wenn sie gleich sind, 1 wenn der Abschnitt dieses
- Objekts früher war als der Abschnitt von
- <varname>$date</varname> und andernfalls -1.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect3>
- </sect2>
- <sect2 id="zend.date.others.comparison">
- <title>Vergleichen von Daten</title>
- <para>
- Die folgenden Basisoperationen haben keine vergleichbaren vereinfachten Methoden für
- Datumsabschnitt wie beschrieben unter <link linkend="zend.date.overview">Zend_Date API
- Overview</link>.
- </para>
- <table id="zend.date.others.comparison.table">
- <title>Methoden zum Vergleichen von Daten</title>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Methoden</entry>
- <entry>Beschreibung</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><methodname>equals()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>equals($date, $part = null, $locale =
- null)</methodname></emphasis>
- </para>
- <para>
- Gibt <constant>TRUE</constant> zurück, wenn der Abschnitt
- <varname>$part</varname> von <varname>$date</varname> der das
- Gebietsschema <varname>$locale</varname> hat, der gleiche ist wie
- der Abschnitt <varname>$part</varname> vom Datum des Objekts,
- andernfalls <constant>FALSE</constant>
- </para>
- </entry>
- </row>
- <row>
- <entry><methodname>isEarlier()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>isEarlier($date, $part = null, $locale =
- null)</methodname></emphasis>
- </para>
- <para>
- Gibt <constant>TRUE</constant> zurück, wenn der Abschnitt
- <varname>$part</varname> vom Datum des Objekts früher ist als der
- Abschnitt <varname>$part</varname> von <varname>$date</varname> der
- das Gebietsschema <varname>$locale</varname> hat
- </para>
- </entry>
- </row>
- <row>
- <entry><methodname>isLater()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>isLater($date, $part = null, $locale =
- null)</methodname></emphasis>
- </para>
- <para>
- Gibt <constant>TRUE</constant> zurück, wenn der Abschnitt
- <varname>$part</varname> vom Datum des Objekts später ist als der
- Abschnitt <varname>$part</varname> von <varname>$date</varname> der
- das Gebietsschema <varname>$locale</varname> hat
- </para>
- </entry>
- </row>
- <row>
- <entry><methodname>isToday()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>isToday()</methodname></emphasis>
- </para>
- <para>
- Testet ob Jahr, Monat und Tag des heutigen Datums mit dem Datumswert
- des Objekts übereinstimmen, wenn die Zeitzone des Objekts
- verwendet wird.
- </para>
- </entry>
- </row>
- <row>
- <entry><methodname>isTomorrow()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>isTomorrow()</methodname></emphasis>
- </para>
- <para>
- Testet ob Jahr, Monat und Tag des morgigen Datums mit dem Datumswert
- des Objekts übereinstimmen, wenn die Zeitzone des Objekts
- verwendet wird.
- </para>
- </entry>
- </row>
- <row>
- <entry><methodname>isYesterday()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>isYesterday()</methodname></emphasis>
- </para>
- <para>
- Testet ob Jahr, Monat und Tag des gestrigen Datums mit dem
- Datumswert des Objekts übereinstimmen, wenn die Zeitzone des
- Objekts verwendet wird.
- </para>
- </entry>
- </row>
- <row>
- <entry><methodname>isLeapYear()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>isLeapYear()</methodname></emphasis>
- </para>
- <para>
- <methodname>isLeapYear()</methodname> kann benutzt werden, um zu
- prüfen, ob das aktuelle Objekt ein Schaltjahr ist. Sonst kann
- <methodname>Zend_Date::checkLeapYear($year)</methodname> benutzt
- werden, um das Jahr <varname>$year</varname> zu prüfen, welches eine
- Zeichenkette, ein Integer oder eine Instanz von
- <classname>Zend_Date</classname> sein kann. Ist das Jahr ein
- Schaltjahr?
- </para>
- </entry>
- </row>
- <row>
- <entry><methodname>isDate()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>isDate($date, $format = null, $locale =
- null)</methodname></emphasis>
- </para>
- <para>
- Diese Methode prüft, ob ein angegebenes Datum ein echtes Datum ist,
- und gibt <constant>TRUE</constant> zurück, wenn alle Prüfungen in
- Ordnung waren. Sie arbeitet wie die <acronym>PHP</acronym>-Funktion
- <methodname>checkdate()</methodname>, kann aber auch
- lokalisierte Monatsnamen prüfen sowie Daten, die den Bereich von
- <methodname>checkdate()</methodname> übersteigen
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect2>
- <sect2 id="zend.date.others.gettingparts">
- <title>Daten und Teile von Daten abfragen</title>
- <para>
- Mehrere Methoden erlauben es, Werte abzurufen, die sich auf eine
- <classname>Zend_Date</classname>-Instanz beziehen.
- </para>
- <table id="zend.date.others.gettingparts.table">
- <title>Ausgabemethoden von Daten</title>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Methode</entry>
- <entry>Erklärung</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><methodname>toString()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>toString($format = null, $locale =
- null)</methodname></emphasis>
- </para>
- <para>
- Direkt aufzurufen oder über die magische Methode
- <methodname>__toString()</methodname>. Die
- Methode <methodname>toString()</methodname> formatiert automatisch
- den Wert des Datumsobjekts anhand der Konventionen des
- Gebietsschemas des Objekts oder einem optional definierten
- Gebietsschema <varname>$locale</varname>. Für eine Liste von
- unterstützten Formatcodes kann hier nachgeschaut werden:
- <link linkend="zend.date.constants.selfdefinedformats">selbst
- definierte AUSGABE Formate mit ISO</link>.
- </para>
- </entry>
- </row>
- <row>
- <entry><methodname>toArray()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>toArray()</methodname></emphasis>
- </para>
- <para>
- Gibt eine Array-Representation des ausgewählten Datums anhand der
- Konventionen des Gebietsschemas zurück. Das zurückgegebene Array ist
- identisch zur <acronym>PHP</acronym>-Funktion <ulink
- url="http://php.net/getdate">getdate()</ulink> und
- beinhaltet:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Tag als Zahl mit '<emphasis>day</emphasis>'
- (<constant>Zend_Date::DAY_SHORT</constant>)
- </para>
- </listitem>
- <listitem>
- <para>
- Monat als Zahl mit '<emphasis>month</emphasis>'
- (<constant>Zend_Date::MONTH_SHORT</constant>)
- </para>
- </listitem>
- <listitem>
- <para>
- Jahr als '<emphasis>year</emphasis>'
- (<constant>Zend_Date::YEAR</constant>)
- </para>
- </listitem>
- <listitem>
- <para>
- Stunde als '<emphasis>hour</emphasis>'
- (<constant>Zend_Date::HOUR_SHORT</constant>)
- </para>
- </listitem>
- <listitem>
- <para>
- Minute als '<emphasis>minute</emphasis>'
- (<constant>Zend_Date::MINUTE_SHORT</constant>)
- </para>
- </listitem>
- <listitem>
- <para>
- Sekunde als '<emphasis>second</emphasis>'
- (<constant>Zend_Date::SECOND_SHORT</constant>)
- </para>
- </listitem>
- <listitem>
- <para>
- Abgekürzte Zeitzone als '<emphasis>timezone</emphasis>'
- (<constant>Zend_Date::TIMEZONE</constant>)
- </para>
- </listitem>
- <listitem>
- <para>
- Unix-Zeitstempel als '<emphasis>timestamp</emphasis>'
- (<constant>Zend_Date::TIMESTAMP</constant>)
- </para>
- </listitem>
- <listitem>
- <para>
- Wochentag als Zahl mit '<emphasis>weekday</emphasis>'
- (<constant>Zend_Date::WEEKDAY_DIGIT</constant>)
- </para>
- </listitem>
- <listitem>
- <para>
- Tag des Jahres als '<emphasis>dayofyear</emphasis>'
- (<constant>Zend_Date::DAY_OF_YEAR</constant>)
- </para>
- </listitem>
- <listitem>
- <para>
- Woche als '<emphasis>week</emphasis>'
- (<constant>Zend_Date::WEEK</constant>)
- </para>
- </listitem>
- <listitem>
- <para>
- Abstand der Zeitzone zu <acronym>GMT</acronym> als
- '<emphasis>gmtsecs</emphasis>'
- (<constant>Zend_Date::GMT_SECS</constant>)
- </para>
- </listitem>
- </itemizedlist>
- </entry>
- </row>
- <row>
- <entry><methodname>toValue()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>toValue($part = null)</methodname></emphasis>
- </para>
- <para>
- Gibt eine Integer-Repräsentation des ausgewählten Datumsabschnittes
- <varname>$part</varname> anhand der Konventionen des
- Gebietsschemas des Objekts zurück. Gibt <constant>FALSE</constant> zurück
- wenn der Abschnitt <varname>$part</varname> ein nicht numerischer
- Wert ist, wie <constant>Zend_Date::MONTH_NAME_SHORT</constant>.
- </para>
- <note>
- <title>Grenzen von toValue()</title>
- <para>
- Diese Methode ruft <link
- linkend="id.date.basic.operations"><methodname>get()</methodname></link>
- auf und castet das Ergebnis in einen <acronym>PHP</acronym>
- Integer-Wert, welcher unerwartete Ergebnisse liefern wird, wenn
- <methodname>get()</methodname> eine numerische Zeichenkette
- zurückgibt, die eine Zahl enthält, welche zu groß für einen
- <acronym>PHP</acronym> Integer-Wert auf Ihrem System ist.
- Stattdessen sollte <methodname>get()</methodname> benutzt
- werden.
- </para>
- </note>
- </entry>
- </row>
- <row>
- <entry>
- <link linkend="id.date.basic.operations">get()</link>
- </entry>
- <entry>
- <para>
- <emphasis><methodname>get($part = null, $locale =
- null)</methodname></emphasis>
- </para>
- <para>
- Diese Methode gibt den Abschnitt <varname>$part</varname> vom Datum
- des Objekts, welches mit dem Gebietsschema
- <varname>$locale</varname> lokalisiert wurde, als formatierten
- String oder Integer zurück. Für weitere Informationen hier
- weiterlesen: <link linkend="id.date.basic.operations">get()</link>.
- </para>
- </entry>
- </row>
- <row>
- <entry><methodname>now()</methodname></entry>
- <entry>
- <para>
- <emphasis><methodname>now($locale = null)</methodname></emphasis>
- </para>
- <para>
- Diese Komfortfunktion ist identisch mit
- <command>new Zend_Date()</command>. Sie gibt das aktuelle Datum als
- <classname>Zend_Date</classname> Objekt zurück, welches das
- Gebietsschema <varname>$locale</varname> hat.
- </para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect2>
- <sect2 id="zend.date.others.fractions">
- <title>Arbeiten mit Sekundenbruchteilen</title>
- <para>
- Viele Methoden unterstützen es, Werte relativ zu einer <classname>Zend_Date</classname>
- Instanz zu erhalten.
- </para>
- <table id="zend.date.others.fractions.table">
- <title>Methoden zur Datumsausgabe</title>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Methode</entry>
- <entry>Erklärung</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <para>
- <emphasis><methodname>getFractionalPrecision()</methodname></emphasis>
- </para>
- </entry>
- <entry>Gibt die Genauigkeit des Sekundenbruchteils zurück</entry>
- </row>
- <row>
- <entry>
- <para>
- <emphasis><methodname>setFractionalPrecision()</methodname></emphasis>
- </para>
- </entry>
- <entry>Setzt die Genauigkeit des Sekundenbruchteils</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect2>
- <sect2 id="zend.date.other.sun">
- <title>Sonnenaufgang / Sonnenuntergang</title>
- <para>
- Drei Methoden geben Zugriff auf geographisch lokalisierte Informationen über die Sonne,
- was die Zeit für Sonnenaufgang und Sonnenuntergang beinhaltet.
- </para>
- <table id="zend.date.other.sun.table">
- <title>Gewöhnliche Methoden</title>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Methode</entry>
- <entry>Erklärung</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <para>
- <emphasis><methodname>getSunrise($location)</methodname></emphasis>
- </para>
- </entry>
- <entry>Gibt die Zeit des Sonnenaufgangs dieses Datums zurück</entry>
- </row>
- <row>
- <entry>
- <para>
- <emphasis><methodname>getSunset($location)</methodname></emphasis>
- </para>
- </entry>
- <entry>Gibt die Zeit des Sonnenuntergangs dieses Datums zurück</entry>
- </row>
- <row>
- <entry>
- <para>
- <emphasis><methodname>getSunInfo($location)</methodname></emphasis>
- </para>
- </entry>
- <entry>Gibt ein Array mit den Sonnendaten des Datums zurück</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect2>
- </sect1>
|