<?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>
