1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: 17986 -->
<sect1 id="zend.date.introduction">
<title>Einführung</title>
<para>
Die <classname>Zend_Date</classname> Komponente bietet eine umfangreiche aber einfache
<acronym>API</acronym> zur Manipulation von Datum und Zeit. Die Methoden verarbeiten eine
große Auswahl von Datentypen in vielen Kombinationen und erweitern die vorhandenen
<acronym>PHP</acronym> Datumsfunktionen um eine Vielzahl von Möglichkeiten. Die aktuelle
Version der Dokumentation kann in unserer <ulink
url="http://framework.zend.com/wiki/display/ZFDOCDEV/Home">Online Dokumentation
(regelmäßig mit SVN synchronisiert)</ulink> gefunden werden.
</para>
<para>
Auch wenn Einfachheit das höchste Ziel bleibt, ist die Arbeit beim Umgang mit lokalisierten
Datums- und Zeitangaben unweigerlich mit einer gewissen Komplexität verbunden. Daten als
auch Zeitangaben werden in verschiedenen Datums- und Zeitzonen oft unterschiedlich
dargestellt. Beispielsweise stellen manche die Monatsangabe voran, während andere das Jahr
an erste Stelle schreiben um ein Kalenderdatum darzustellen. Für weiterführende
Informationen über die Handhabung von Lokalisierung und Normalisierung kann im Abschnitt
<link linkend="zend.locale.date.datesandtimes"><classname>Zend_Locale</classname></link>
nachgelesen werden.
</para>
<para>
<classname>Zend_Date</classname> unterstützt auch abgekürzte Monatsnamen in vielen Sprachen.
<classname>Zend_Locale</classname> erleichert die Normalisierung von lokalisierten
Monatsnamen und Wochentagen zu Zeitpunkten, die umgekehrt auch wieder lokalisiert für andere
Regionen übersetzt werden können.
</para>
<sect2 id="zend.date.setdefaulttimezone">
<title>Immer eine Standardzeitzone definieren</title>
<para>
Bevor beliebige datumsrelevante Funktionen in <acronym>PHP</acronym> oder dem Zend
Framework verwendet werden können, sollten sichergestellt werden, dass die
Standardzeitzone in der Anwendung korrekt definiert wurde. Das kann wahlweise mit dem
Definieren einer TZ Umgebungsvariablen, der <property>date.timezone</property>
Einstellung in der <filename>php.ini</filename> oder durch die Funktion <ulink
url="http://php.net/date_default_timezone_set">date_default_timezone_set()</ulink>
durchgeführt werden. Durch das Setzen einer Standardzeitzone können in
<acronym>PHP</acronym> können alle datums- und zeitabhängigen Funktionen für einen
bestimmten Benutzer angepasst werden. Eine vollständige Auflistung der
Zeitzoneneinstellungen kann in der <ulink
url="http://unicode.org/cldr/data/diff/supplemental/territory_containment_un_m_49.html">
CLDR Zeitzonen Liste</ulink> ( Englisch ) gefunden werden.
</para>
<example id="zend.date.setdefaulttimezone.example-1">
<title>Definieren einer Standardzeitzone</title>
<programlisting language="php"><![CDATA[
// Zeitzone für die USA, Kalifornien
date_default_timezone_set('America/Los_Angeles');
// Zeitzone für Deutschland
date_default_timezone_set('Europe/Berlin');
]]></programlisting>
</example>
<para>
<emphasis>Wenn eine <classname>Zend_Date</classname> Instanz erzeugt wird, wird die
Zeitzone des aktuellen Benutzers automatisch als aktuelle Standardzeitzone
übernommen</emphasis>. Deshalb wird die Einstellung der Zeitzone für jede Zeitumstellung
(<acronym>DST</acronym>) berücksichtigt und erspart effektiv das explizite Setzen der
Sommer-/Winterzeitumstellung (<acronym>DST</acronym>).
</para>
<para>
Es gilt zu beachten, dass die Zeitzonen <emphasis><acronym>UTC</acronym></emphasis> und
<emphasis><acronym>GMT</acronym></emphasis> keine Sommer-/Winterzeitumstellung
enthalten. Das bedeutet, dass selbst wenn per Hand definiert wurde, dass
<classname>Zend_Date</classname> die <acronym>DST</acronym> berücksichtigen soll, das
automatisch für alle Instanzen von <classname>Zend_Date</classname> zurückgeschaltet
wird, die auf <acronym>UTC</acronym> oder <acronym>GMT</acronym> eingestellt wurden.
</para>
</sect2>
<sect2 id="zend.date.why">
<title>Warum soll Zend_Date verwendet werden ?</title>
<para>
<classname>Zend_Date</classname> erweitert die Möglichkeiten der <acronym>PHP</acronym>
Datumsfunktionen um folgende Features:
</para>
<itemizedlist mark='opencircle'>
<listitem>
<para>
Einfache <acronym>API</acronym>
</para>
<para>
<classname>Zend_Date</classname> bietet eine sehr einfache
<acronym>API</acronym>, welche die besten Datums- und Zeitfunktionen aus vier
Programmiersprachen vereint. Beispielsweise ist es möglich, in nur einer Zeile
zwei Zeiten miteinander zu vergleichen oder zu addieren.
</para>
</listitem>
<listitem>
<para>
Vollständig internationalisiert
</para>
<para>
Alle vollen und abgekürzten Monatsnamen und Wochentage aus mehr als 130 Sprachen
werden unterstützt. Die Methoden ermöglichen die Ein- und Ausgabe von Daten im
Format des jeweiligen Gebietsschemas.
</para>
</listitem>
<listitem>
<para>
Unlimitierte Zeitpunkte
</para>
<para>
Obwohl die <acronym>PHP</acronym> 5.2 Dokumentation erklärt: "Die gültige Spanne
eines Zeitpunktes geht von Fr, 13. Dez 1901 20:45:54 <acronym>GMT</acronym> bis
Di, 19. Jan 2038 03:14:07 <acronym>GMT</acronym>", ermöglicht
<classname>Zend_Date</classname> mit Unterstützung der BCMath Erweiterung eine
fast unbegrenzte Zeitspanne. Wenn BCMath nicht verfügbar ist, bietet
<classname>Zend_Date</classname> eine Spanne innerhalb des float
Datentyps des verwendeten Servers. "Die Größe von float ist Plattformabhängig,
allerdings ist das Maximum von <command>~1.8e308</command> mit einer Genauigkeit
von ca. 14 Dezimalstellen ein Standardwert. (das 64 bit <acronym>IEEE</acronym>
Format)." [<ulink
url="http://www.php.net/float">http://www.php.net/float</ulink>]. Zusätzlich
können inhärente Beschränkungen der Float-Datentypen sowie Rundungsfehler von
Fließkommazahlen Berechnungsfehler verursachen. Um diese Probleme zu vermeiden,
verwenden die I18n-Komponenten des Zend Frameworks die BCMath Extension, wenn
verfügbar.
</para>
</listitem>
<listitem>
<para>
Unterstützung der <acronym>ISO-8601</acronym> Datumsspezifikation
</para>
<para>
Die <acronym>ISO-8601</acronym> Datumsspezifikationen werden unterstützt. Sogar
teilkonforme <acronym>ISO-8601</acronym> Datumsspezifikationen werden erkannt.
Diese Zeitformate sind vor allem bei der Arbeit mit Datenbanken sinnvoll. Selbst
wenn zum Beispiel MsSQL und <ulink
url="http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html">MySQL</ulink>
leicht unterschiedlich mit Datum und Zeit umgehen, werden beide von
<classname>Zend_Date</classname> unterstützt, wenn die <link
linkend="zend.date.constants.list">Zend_Date::ISO_8601</link> Format
Konstante verwendet wird. Wenn Datumszeichen mit den <acronym>PHP</acronym>
<methodname>date()</methodname> Formaten "<command>Y/m/d</command>" oder
"<command>Y-m-d H:i:s</command>" übereinstimmen, sollte die in
<classname>Zend_Date</classname> eingebaute Unterstützung für
<acronym>ISO-8601</acronym> formatierte Daten verwendet werden.
</para>
</listitem>
<listitem>
<para>
Sonnenauf- und Untergang errechnen
</para>
<para>
Sonnenauf-und Untergang können für jeden beliebigen Ort und Tag anzeigen werden,
so dass keine einzige Sekunde Tageslicht für das
Lieblings-<acronym>PHP</acronym>-Projekt verpasst werden muß :)
</para>
</listitem>
</itemizedlist>
</sect2>
</sect1>
|