Zend_Date-Overview.xml 52 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15207 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.date.overview">
  5. <title>Zend_Date API Übersicht</title>
  6. <para>
  7. Obwohl die API von <classname>Zend_Date</classname> simpel und eindeutig ist, ist dessen Design flexibel und
  8. mächtig durch die Vielzahl an Möglcihkeiten von Operationen und Operanden.
  9. </para>
  10. <sect2 id="zend.date.options">
  11. <title>Zend_Date Optionen</title>
  12. <sect3 id="zend.date.options.formattype">
  13. <title>Auswahl der Art des Datumsformats</title>
  14. <para>
  15. Viele Methoden benutzen Zeichenketten für Datumsformate so ähnlich wie PHP's <code>date()</code>.
  16. Wenn man mit den Zeichen von PHP's Datumsformaten mehr Erfahrung hat als mit den ISO
  17. Zeichen für Formate dann kann man <classname>Zend_Date::setOptions(array('format_type' => 'php'))</classname>
  18. benutzen. Danach können PHP's Zeichen für Datumsformate für alle Funktionen verwendet werden die
  19. einen <code>$format</code> Parameter akzeptieren. Durch Benutzen von
  20. <classname>Zend_Date::setOptions(array('format_type' => 'iso'))</classname> kann man wieder auf den
  21. Standardmodus zurückwechseln der nur ISO Zeichen für Datumsformate unterstützt. Für eine Liste von
  22. unterstützten Zeichen Codes kann hier nachgelesen werden: <xref linkend="zend.date.constants.phpformats" />
  23. </para>
  24. </sect3>
  25. <sect3 id="zend.date.options.fixdst">
  26. <title>Sommer-/Winterzeit und Datumsberechnungen</title>
  27. <para>
  28. Wenn Daten manipuliert werden überschrieten Sie manchmal die Sommer-/Winterzeit Grenze was
  29. normalerweise dazu führt das das Datum eine Stunde verliert oder hinzubekommt. Wenn zum Beispiel
  30. ein Monat zu einem Datum vor einer Sommer-/Winterzeitänderung hinzugefügt wird und das
  31. Ergebnismonat nach dieser Änderung liegt, sieht es so aus als ob das Datum eine Stunde verliert
  32. oder hinzubekommt durch den Wert des geänderten Datums. Für Grenzstunden, wie Mitternacht für
  33. den ersten oder letzten Tag eines Monats, führt das Hinzufügen von genügend Monaten, wenn die
  34. Sommer-/Winterzeitgrenze überschritten wird, dazu das das Datum eine Stunde verliert und damit
  35. zum letzten Tag des Vormonats wird durch das Erscheinungsbild des "eins fehlt" Fehlers. Um diese
  36. Situationen zu vermeiden, kann die Sommer-/Winterzeit durch Verwendung der
  37. <code>fix_dst</code> Option ignoriert werden. Wenn eine Sommer-/Winterzeitgrenze überschritten wird,
  38. wird ja normalerweise eine Stunde hinzugefügt oder entfernt abhändig vom Datum. Zum Beispiel führt
  39. eine Datumsberechnung einer Frühlingsgrenze z ueinem Datum welche einen Tag weniger hat als
  40. erwartet, wenn die Zeit des Originaldatums 00:00:00 war. Da Zend_Date auf Zeitpunkten basiert
  41. und nicht auf Kalenderdaten mit Zeitkomponenten, verliert der Zeitpunkt eine Stunde was zu einem
  42. Datum führt das einen Kalendertag weniger hat als erwartet. Um solche Problem zu verhindern kann
  43. die Option <code>fix_dst</code> verwendet werden, welche standardmäßig wahr ist. Das führt
  44. dazu das die Sommer-/Winterzeit keinen Einfluß mehr bei Datumsberechnungen zeigt
  45. (<code>addMOnth(), subMonth()</code>). <classname>Zend_Date::setOptions(array('fix_dst' => false))</classname>
  46. kann benutzt werden um Hinzufügen oder Entfernen der Sommer-/Winterzeitanpassung zu gestatten wenn
  47. Datumsberechnungen durchgeführt werden.
  48. </para>
  49. <para>
  50. <emphasis role="strong">Wenn die aktuelle Zeitzone innerhalb der Instanz von
  51. <classname>Zend_Date</classname> auf UTC oder GMT gestellt wird, wird die Option <code>'fix_dst'</code>
  52. nicht verwendet</emphasis> weil diese zwei Zeitzonen nicht mit DST arbeiten. Wenn die Zeitzone
  53. für diese Instanz wieder auf eine Zeitzone gestellt wird die nicht UTC oder GMT ist, wird die
  54. vorher definierte 'fix_dst' Option wieder für die Datumsberechnungen verwendet.
  55. </para>
  56. </sect3>
  57. <sect3 id="zend.date.options.extendmonth">
  58. <title>Monatsberechnungen</title>
  59. <para>
  60. Wenn Monate von einem existierenden Datum hinzugefügt oder entfernt werden, kann der
  61. Ergebniswert des Monatstages unerwartet sein, wenn das Originaldatum auf einen Tag gefallen ist
  62. der Nahe am Ende des Monats ist. Wenn zum Beispiel ein Monat zum 31sten Jänner hinzugefügt wird,
  63. werden Personen welche mit SQL vertraut sind den 28sten Februar als Ergebnis erwarten. Auf der
  64. anderen Seite werden Personen welche mit Excel und OpenOffice vertraut sind werden den
  65. 3tten März als Ergebnis erwarten. Das Problem besteht nur wen das Ergebnismonat den Tag der
  66. im Originaldatum gesetzt war, nicht hat. Für ZF Entwickler können das gewünschte Verhalten
  67. ausgewählen indem die Option <code>extend_month</code> genutzt wird um entweder das SQL
  68. Verhalten, wenn die Option wahr ist, oder das Tabellenverhalten, wenn die Option falsch ist,
  69. auszuwählen. Das Standardverhalten für <code>extend_month</code> ist falsch, um SQL kompatibles
  70. Verhalten zu erlauben. <classname>Zend_Date</classname> führt Monatsberechnungen standardmäßig in der Art
  71. durch das Daten auf das Monatsende hin abgeschnitten werden (wenn notwendig), ohne das in den
  72. nächsten Monat umgebrochen wird wenn das Originaldatum einen Monatstag bestimmt der die
  73. Anzahl der Tag des Ergebnismonats überschreitet.
  74. <classname>Zend_Date::setOptions(array('extend_month' => true));</classname> kann benutzt werden um
  75. Monatsberechnungen wie in populären Tabellenkalkulationen durchzuführen.
  76. </para>
  77. </sect3>
  78. <sect3 id="zend.date.options.cache">
  79. <title>Lokalisierung und Normalisierung von Daten mit Zend_Cache schneller machen</title>
  80. <para>
  81. Man kann <classname>Zend_Date</classname> schneller machen indem ein <classname>Zend_Cache</classname> Adapter
  82. verwendet wird. Das verschnellert alle Methoden von <classname>Zend_Date</classname> wenn lokalisierte
  83. Daten verwendet werden. Zum Beispiel werden alle Methoden welche <classname>Zend_Date::DATE</classname>
  84. und <classname>Zend_Date::TIME</classname> Konstanten akzeptieren hiervon profitieren. Um einen
  85. <classname>Zend_Cache</classname> Adapter für <classname>Zend_Date</classname> zu setzen muß nur
  86. <classname>Zend_Date::setOptions(array('cache' => $adapter));</classname> aufgerufen werden.
  87. </para>
  88. </sect3>
  89. <sect3 id="zend.date.options.timesync">
  90. <title>Syncronisierte Zeiten mit Zend_TimeSync erhalten</title>
  91. <para>
  92. Normalerweise unterscheiden sich die Uhren von Servern und Computern voneinander.
  93. <classname>Zend_Date</classname> ist dazu fähig solche Probleme mit Hilfe von <classname>Zend_TimeSync</classname>
  94. zu handhaben. Mit <classname>Zend_Date::setOptions(array('timesync' => $timeserver));</classname>
  95. kann ein Zeitserver gesetzt werden welcher den Unterschied zwischen dem eigenen aktuellen
  96. Zeitpunkt und dem wirklichen aktuellen Zeitpunkt für alle Instanzen von Zend_Date setzt.
  97. Die Verwendung dieser Option ändern nicht den Zeitpunkt von bestehenden Instanzen. Am besten
  98. ist es also dies innerhalb der Bootstrap Datei zu setzen.
  99. </para>
  100. </sect3>
  101. </sect2>
  102. <sect2 id="zend.date.values">
  103. <title>Arbeiten mit Datumswerten</title>
  104. <para>
  105. Sobald die Eingabe durch die Erstellung eines <classname>Zend_Date</classname> Objektes normalisiert wurde,
  106. hat es eine zugeordnete Zeitzone aber eine Interne Darstellung durch Verwendung von
  107. <ulink url="http://en.wikipedia.org/wiki/Unix_Time">UNIX Zeitpunkten</ulink>.
  108. Damit ein Datum in einer lokalisierten Art und Weise durchsucht werden kann, muß zuerst eine
  109. Zeitzone bekannt sein. Die Standardzeitzone ist immer GMT/UTC. Um die Zeitzone des Objektes zu
  110. inspizieren kann <code>getTimeZone())</code> verwendet werden. Um die Zeitzone des Objektes zu
  111. wechseln kann <code>setTimeZone())</code> verwendet werden. Alle Änderungen des Objektes sind immer
  112. relativ zu seiner Zeitzone zu sehen.
  113. </para>
  114. <para>
  115. Aufpassen das nicht Teile von Datumsobjekten die unterschiedliche Zeitzonen haben, gemischt oder
  116. verglichen werden, da dies Grundsätzlich unerwartete Resultate zeigen kann da die Manipulationen
  117. nur dem Zeitpunkt zugeordnet werden. Das Arbeiten an <classname>Zend_Date</classname> Objekten die unterschiedliche
  118. Zeitzonen haben funktioniert grundsätzlich abgesehen davon wie vorher erwähnt, da Daten bei der
  119. Instantiierung von <classname>Zend_Date</classname> zu UNIX Zeitpunkten normalisiert werden.
  120. </para>
  121. <para>
  122. Die meisten Methoden erwarten eine Konstante für die Auswahl des gewünschten Teils <code>$part</code>
  123. des Datums, wie z.B. <classname>Zend_Date::HOUR</classname>. Diese Konstanten sind für alle unten angeführten
  124. Funktionen gültig. Eine Liste aller vorhandenen Konstanten wird hier beschrieben:
  125. <xref linkend="zend.date.constants.list" />.
  126. Wenn <code>$part</code> nicht spezifiziert wird, wird <classname>Zend_Date::TIMESTAMP</classname> angenommen.
  127. Alternativ kann ein benutzerdefiniertes Format für <code>$part</code> verwendet werden, mit Hilfe
  128. der gleichen Mechanismen und Formatdefinitionen wie bei
  129. <link linkend="zend.locale.date.normalize"><classname>Zend_Locale_Format::getDate()</classname>
  130. </link>. Wenn ein Datumsobjekt erstellt wird durch Verwendung eines offensichtlich falschen Datums
  131. (z.B. die Nummer des Monats größer als 12), wird <classname>Zend_Date</classname> eine Ausnahme werfen, solange
  132. kein spezielles Datumsformat ausgewählt wurde, und z.B. <code>$part</code> entweder <code>null</code>
  133. oder <classname>Zend_Date::DATES</classname> (ein "fehlertolerantes" Format).
  134. </para>
  135. <example id="zend.date.values.example-1">
  136. <title>Benutzerdefinierte Eingabeformate für Daten</title>
  137. <programlisting role="php"><![CDATA[
  138. $date1 = new Zend_Date('Feb 31, 2007', null, 'en_US');
  139. echo $date1, "\n"; // Ausgabe "Mar 3, 2007 12:00:00 AM"
  140. $date2 = new Zend_Date('Feb 31, 2007', Zend_Date::DATES, 'en_US');
  141. echo $date2, "\n"; // Ausgabe "Mar 3, 2007 12:00:00 AM"
  142. // Stikte Interpretation des angegebenen Formats
  143. $date3 = new Zend_Date('Feb 31, 2007', 'MM.dd.yyyy');
  144. echo $date3, "\n"; // Ausgabe "Mar 3, 2007 12:00:00 AM"
  145. ]]></programlisting>
  146. </example>
  147. <para>
  148. Wenn der optionale <code>$locale</code> Parameter angegeben wurde, dann verdeutlicht <code>$locale</code>
  149. den <code>$date</code> Operand durch Ersetzen der Monatsnamen und Wochentagsnamen für die <code>$date</code>
  150. Zeichenkette, und auch Datumszeichenketten können analysiert werden durch die Vorschriften dieses
  151. Gebietsschemas (siehe
  152. <code><link linkend="zend.locale.date.normalize">Zend_Locale_Format::getDate()</link></code>).
  153. Die automatische Normalisierung von lokalisierten <code>$date</code> Angaben einer Zeichenkette werden
  154. nur dann durchgeführt wenn eine der <classname>Zend_Date::DATE*</classname> oder <classname>Zend_Date::TIME*</classname>
  155. Konstanten verwendet wird. Das Gebietsschema identifiziert die Sprache welche verwendet werden soll
  156. um Monatsnamen und Wochentagsnamen zu analysieren wenn <code>$date</code> eine Zeichenkette ist die
  157. ein Datum enthält. Wenn der Eingabeparameter <code>$date</code> nicht angegeben wurde, dann definiert
  158. der <code>$locale</code> Parameter das Gebietsschema für lokalisierte Ausgaben (z.B. das Datumsformat
  159. für eine Ausgabe als Zeichenkette). Anzumerken ist auch das der <code>$date</code> Parameter stattdessen
  160. ein Typname sein kann (z.B. <code>$hour</code> für <code>addHour()</code>), und das verhindert auch nicht
  161. das ein <classname>Zend_Date</classname> Objekt als Argument für diesen Parameter angegeben werden kann. Wenn keine
  162. <code>$locale</code> angegeben wurde, wird das Gebietsschema des aktuellen Objektes genommen um
  163. <code>$date</code> zu interpretieren oder das lokalisierte Format für die Ausgabe auszuwählen.
  164. </para>
  165. <para>
  166. Seit Zend Framework 1.7.0 unterstützt <classname>Zend_Date</classname> auch die Verwendung eines
  167. Anwendungsweiten Gebietsschemas. Man kann ganz einfach eine <classname>Zend_Locale</classname> Instanz
  168. in der Registry setzen wie anbei gezeigt. Mit dieser Schreibweise kann man das manuelle Setzen eines
  169. Gebietsschemas für jede Instanz vergessen wenn man das selbe Gebietsschema mehrere Male verwenden
  170. will.
  171. </para>
  172. <programlisting role="php"><![CDATA[
  173. // In der Bootstrap Datei
  174. $locale = new Zend_Locale('de_AT');
  175. Zend_Registry::set('Zend_Locale', $locale);
  176. // Irgendwo in der eigenen Anwendung
  177. $date = new Zend_Date('31.Feb.2007');
  178. ]]></programlisting>
  179. </sect2>
  180. <sect2 id="id.date.basic">
  181. <title>Grundsätzliche Zend_Date Operationen für die meisten Teile von Daten</title>
  182. <para>
  183. Die Methoden <code>add(), sub(), compare(), get(), und set()</code> arbeiten generell mit Daten. In
  184. Jedem Fall wird die Operation auf dem Datum durchgeführt das in den Objektinstanz vorhanden ist. Der
  185. <code>$date</code> Operand wird für alle dieser Methoden benötigt, ausser für <code>get()</code> und
  186. kann eine <classname>Zend_Date</classname> Objektinstanz, eine nummerische Zeichenkette oder ein Integer sein.
  187. Diese Methoden nehmen an das <code>$date</code> ein Zeitpunkt ist, wenn es kein Objekt ist. Trotzdem
  188. kontrolliert der <code>$part</code> Operand an welchem logischen Teil der zwei Daten gearbeitet werden
  189. soll, was Arbeiten an Teilen von Daten des Objekts erlaubt, wie Jahr oder Minute selbst wenn
  190. <code>$date</code> eine lange Form einer Datumszeichenkette enthält wie "Dezember 31, 2007 23:59:59".
  191. Das Ergebnis der Operation ändert das Datum im Objekt ausser bei <code>compare()</code> und
  192. <code>get()</code>.
  193. </para>
  194. <example id="zend.date.basic.example-1">
  195. <title>Arbeiten an Teilen von Daten</title>
  196. <programlisting role="php"><![CDATA[
  197. $date = new Zend_Date(); // $date's Zeitpunkt === time()
  198. // Ändert $date durch addieren von 12 Stunden
  199. $date->add('12', Zend_Date::HOUR);
  200. print $date;
  201. ]]></programlisting>
  202. </example>
  203. <para>
  204. Übliche Methoden existieren für jede Kombination von Basisarbeiten und viele normale Datumsabschnitte
  205. wie in der Tabelle anbei gezeigt. Diese üblichen Methoden erlauben uns faulen Programmierern zu vermeiden
  206. das die
  207. <link linkend="zend.date.constants.list">Konstanten für Datumsabschnitte</link> ausgeschrieben werden
  208. müssen. Normalerweise sind wir benannt durch Kombination eines Prefixes (Name der Basisoperation) und
  209. einem Suffix (Art des Datumsabschnittes), wie <code>addYear()</code>. In der Liste die anbei steht,
  210. existieren alle Kombinationen von "Datumsabschnitten" und "Basisoperationen". Zum Beispiel die Operation
  211. "add" existiert für jeden dieser Datumsabschnitte wie <code>addDay()</code>, <code>addYear()</code>
  212. und viele mehr.
  213. </para>
  214. <para>
  215. Diese üblichen Methoden haben die selbe gleichartige Funktionalität wie die Methoden für die
  216. Basisoperationen, aber Sie erwarten Zeichenkette und Integer <code>$date</code> Operanden welche
  217. nur die Werte enthalten welche durch den Typ definiert sind der durch den Suffix der Methode definiert
  218. wurde. Deshalb identifizieren diese Methoden (z.B. "Year" oder "Minute") die Einheit des
  219. <code>$date</code> Operanden wenn <code>$date</code> eine Zeichenkette oder ein Integer ist
  220. </para>
  221. <sect3 id="id.date.basic.parts">
  222. <title>Liste der Datumsabschnitte</title>
  223. <table id="id.date.basic.parts.table">
  224. <title>Datumsabschnitte</title>
  225. <tgroup cols="2">
  226. <thead>
  227. <row>
  228. <entry>Datumsabschnitt</entry>
  229. <entry>Erklärung</entry>
  230. </row>
  231. </thead>
  232. <tbody>
  233. <row>
  234. <entry>
  235. <ulink url="http://en.wikipedia.org/wiki/Unix_Time">Zeitpunkt</ulink>
  236. </entry>
  237. <entry>
  238. UNIX Zeitpunkt, ausgedrückt in Sekunden die vergangen sind seit dem
  239. 1. Jänner, 1970 00:00:00 GMT/UTC.
  240. </entry>
  241. </row>
  242. <row>
  243. <entry>
  244. <ulink url="http://en.wikipedia.org/wiki/Gregorian_calendar">Jahr</ulink>
  245. </entry>
  246. <entry>Gregorianisches Kalenderjahr (z.B. 2006)</entry>
  247. </row>
  248. <row>
  249. <entry>
  250. <ulink url="http://en.wikipedia.org/wiki/Month#Julian_and_Gregorian_calendars">Monat</ulink>
  251. </entry>
  252. <entry>Gregorianisches Kalendermonat (1-12, Lokalisierte Namen werden unterstützt)</entry>
  253. </row>
  254. <row>
  255. <entry>
  256. <ulink url="http://en.wikipedia.org/wiki/24-hour_clock">24 Stunden Uhr</ulink>
  257. </entry>
  258. <entry>
  259. Stunde des Tages (0-23) bezeichnet die vergangenen Stunden seit dem Beginn
  260. des Tages
  261. </entry>
  262. </row>
  263. <row>
  264. <entry>
  265. <ulink url="http://en.wikipedia.org/wiki/Minute">Minute</ulink>
  266. </entry>
  267. <entry>
  268. Minuten der Stunde (0-59) bezeichnet die vergangenen Minuten seit dem Beginn
  269. der Stunde
  270. </entry>
  271. </row>
  272. <row>
  273. <entry>
  274. <ulink url="http://en.wikipedia.org/wiki/Second">Sekunde</ulink>
  275. </entry>
  276. <entry>
  277. Sekunde der Minute (0-59) bezeichnet die vergangenen Sekunden seit dem Beginn
  278. der Minute
  279. </entry>
  280. </row>
  281. <row>
  282. <entry>
  283. <ulink url="http://en.wikipedia.org/wiki/Millisecond">Millisekunde</ulink>
  284. </entry>
  285. <entry>
  286. Millisekunden bezeichnen Tausendstel einer Sekunde (0-999). <classname>Zend_Date</classname>
  287. unterstützt zwei zusätzliche Methoden für das Arbeiten mit Zeiteinheiten die kleiner
  288. als Sekunden sind. Normalerweise verwenden <classname>Zend_Date</classname> Instanzen eine
  289. Genauigkeit welche der von Millisekunden entspricht wie man durch
  290. <code>getFractionalPrecision()</code> sehen kann. Um die Genauigkeit zu Ändern kann
  291. <code>setFractionalPrecision($precision)</code> verwendet werden. Trotzdem ist die
  292. Genauigkeit praktisch auf Millisekunden begrezt da <classname>Zend_Date</classname>
  293. <code>
  294. <ulink url="http://php.net/microtime">microtime()</ulink></code> dafür benutzt.
  295. </entry>
  296. </row>
  297. <row>
  298. <entry>
  299. <ulink url="http://en.wikipedia.org/wiki/Day">Tag</ulink>
  300. </entry>
  301. <entry>
  302. <classname>Zend_Date::DAY_SHORT</classname> wird von <code>$date</code> extrahiert wenn der
  303. <code>$date</code> Operand eine <classname>Zend_Date</classname> Instanz oder eine nummerische
  304. Zeichenkette ist. Sonst wird versucht den Tag laut den dokumentierten Konventionen
  305. für diese Konstanten zu extrahieren: <classname>Zend_Date::WEEKDAY_NARROW</classname>
  306. , <classname>Zend_Date::WEEKDAY_NAME</classname>, <classname>Zend_Date::WEEKDAY_SHORT</classname>
  307. , <classname>Zend_Date::WEEKDAY</classname> (Gregorianischer Kalender angenommen)
  308. </entry>
  309. </row>
  310. <row>
  311. <entry>
  312. <ulink url="http://en.wikipedia.org/wiki/Week">Woche</ulink>
  313. </entry>
  314. <entry>
  315. <classname>Zend_Date::WEEK</classname> wird von <code>$date</code> extrahiert wenn der
  316. <code>$date</code> Operand eine Instanz von <classname>Zend_Date</classname> oder eine
  317. nummerische Zeichenkette ist. Sonst wird eine Ausnahme geworfen.
  318. (Gregorianischer Kalender angenommen)</entry>
  319. </row>
  320. <row>
  321. <entry>Datum</entry>
  322. <entry>
  323. <classname>Zend_Date::DAY_MEDIUM</classname> wird aus <code>$date</code> extrahiert wenn der
  324. <code>$date</code> Operand eine Instanz von <classname>Zend_Date</classname> ist. Sonst wird
  325. versucht das Datum in ein Zend_Date::DATE_MEDIUM formatiertes Datum
  326. zu normalisieren. Das Format von <classname>Zend_Date::DATE_MEDIUM</classname> hängt vom
  327. Gebietsschema des Objektes ab.
  328. </entry>
  329. </row>
  330. <row>
  331. <entry>Wochentage</entry>
  332. <entry>
  333. Wochentage werden nummerisch dargestellt von 0 (für Sonntag) bis 6 (für Samstag).
  334. <classname>Zend_Date::WEEKDAY_DIGIT</classname> wird aus <code>$date</code> extrahiert wenn
  335. der <code>$date</code> Operand eine Instanz von <classname>Zend_Date</classname> oder eine
  336. numerische Zeichenkette ist. Sonst wird versucht den Tag laut den dokumentierten
  337. Konventionen für diese Konstanten zu extrahieren:
  338. <classname>Zend_Date::WEEKDAY_NARROW</classname>, <classname>Zend_Date::WEEKDAY_NAME</classname>,
  339. <classname>Zend_Date::WEEKDAY_SHORT</classname>, <classname>Zend_Date::WEEKDAY</classname>
  340. (Gregorianischer Kalender angenommen)
  341. </entry>
  342. </row>
  343. <row>
  344. <entry>Tag des Jahres</entry>
  345. <entry>
  346. In <classname>Zend_Date</classname> wird der Tag des Jahres als Anzahl der Kalendertage
  347. dargestellt die seit dem Start des Jahres vergangen sind (0-365). Wie bei den
  348. anderen oben dargestellten Einheiten werden Bruchteile auf die nächste ganze
  349. Nummer abgerundet. (Gregorianischer Kalender angenommen)
  350. </entry>
  351. </row>
  352. <row>
  353. <entry>
  354. <ulink url="http://www.faqs.org/rfcs/rfc822.html">Arpa</ulink>
  355. </entry>
  356. <entry>
  357. Arpa Daten (bzw RFC 822 formatierte Daten) werden unterstützt. Die Ausgabe verwendet
  358. entweder "GMT" oder "Laut Gebietsschema unterschiedliche Stunden + Minuten" Format
  359. (siehe Sektion 5 von RFC 822). Vor PHP 5.2.2, zeigte die Verwendung der
  360. DATE_RFC822 Konstante mit PHP date Funktionen hier und da
  361. <ulink url="http://bugs.php.net/bug.php?id=40308">fehlerhafte Ergebnisse</ulink>.
  362. Die Ergebnisse von Zend_Date sind korrekt. Beispiel:
  363. <code>Mon, 31 Dec 06 23:59:59 GMT</code>
  364. </entry>
  365. </row>
  366. <row>
  367. <entry>
  368. <ulink url="http://en.wikipedia.org/wiki/ISO_8601">Iso</ulink>
  369. </entry>
  370. <entry>
  371. Für die Ausgabe werden nur vollständige ISO 8601 Daten unterstützt.
  372. Beispiel: <code>2009-02-14T00:31:30+01:00</code>
  373. </entry>
  374. </row>
  375. </tbody>
  376. </tgroup>
  377. </table>
  378. </sect3>
  379. <sect3 id="id.date.basic.operations">
  380. <title>Liste der Datums-Operationen</title>
  381. <para>
  382. Die unten angeführten Basisoperationen können statt den bequemlichen Operationen für spezielle
  383. Datumsabschnitte verwendet werden. Die
  384. <link linkend="zend.date.constants.list">entsprechenden Konstanten</link> werden für den
  385. <code>$part</code> Parameter verwendet.
  386. </para>
  387. <table id="id.date.basic.operations.table">
  388. <title>Basis Operationen</title>
  389. <tgroup cols="2">
  390. <thead>
  391. <row>
  392. <entry>Basis Operationen</entry>
  393. <entry>Erklärung</entry>
  394. </row>
  395. </thead>
  396. <tbody>
  397. <row>
  398. <entry>get()</entry>
  399. <entry>
  400. <para>
  401. <emphasis role="strong">get($part = null, $locale = null)</emphasis>
  402. </para>
  403. <para>
  404. <code>get($part)</code> kann benutzt werden um einen Datumsabschnitt
  405. <code>$part</code> dieses Datumsobjektes welcher in ein
  406. Gebietsschema lokalisiert oder als formatierte Zeichenkette oder Integer
  407. gewünscht ist zurück zu bekommen. Durch Verwendung der BCMath Erweiterung können
  408. nummerische Zeichenkettten statt Integer für große Werte zurückgegeben werden.
  409. <emphasis role="strong">NOTE:</emphasis> Anders als <code>get()</code> geben
  410. die anderen get*() bequemlichen Methoden nur Instanzen von <classname>Zend_Date</classname>
  411. zurück welche nur das Datum oder die Zeit repräsentieren das ausgewählt oder berechnet
  412. wurde.
  413. </para>
  414. </entry>
  415. </row>
  416. <row>
  417. <entry>set()</entry>
  418. <entry>
  419. <para>
  420. <emphasis role="strong">set($date, $part = null, $locale = null)</emphasis>
  421. </para>
  422. <para>
  423. Setzt den Abschnitt <code>$part</code> des aktuellen Objektes übereinstimmend mit
  424. dem Wert der für diesen Abschnitt in der Eingabe <code>$date</code>
  425. und im Gebietsschema <code>$locale</code> gefunden wurde.
  426. </para>
  427. </entry>
  428. </row>
  429. <row>
  430. <entry>add()</entry>
  431. <entry>
  432. <para>
  433. <emphasis role="strong">add($date, $part = null, $locale = null)</emphasis>
  434. </para>
  435. <para>
  436. Addiert den Abschnitt <code>$part</code> von <code>$date</code> welcher im
  437. Gebietsschema <code>$locale</code> geschrieben ist zum Datum des
  438. aktuellen Objektes.
  439. </para>
  440. </entry>
  441. </row>
  442. <row>
  443. <entry>sub()</entry>
  444. <entry>
  445. <para>
  446. <emphasis role="strong">sub($date, $part = null, $locale = null)</emphasis>
  447. </para>
  448. <para>
  449. Subtrahiert den Abschnitt <code>$part</code> von <code>$date</code> welcher
  450. im Gebietsschema <code>$locale</code> geschrieben ist vom Datum des
  451. aktuellen Objektes.
  452. </para>
  453. </entry>
  454. </row>
  455. <row>
  456. <entry>copyPart()</entry>
  457. <entry>
  458. <para>
  459. <emphasis role="strong">copyPart($part, $locale = null)</emphasis>
  460. </para>
  461. <para>
  462. Gibt ein geklontes Objekt zurück, wobei nur der gewünschte Abschnitt
  463. <code>$part</code> des Datumsobjektes kopiert wird, wobei im Klon das
  464. Gebietsschema von <code>$locale</code> gesetzt wird (wenn angegeben).
  465. </para>
  466. </entry>
  467. </row>
  468. <row>
  469. <entry>compare()</entry>
  470. <entry>
  471. <para>
  472. <emphasis role="strong">compare($date, $part = null, $locale = null)</emphasis>
  473. </para>
  474. <para>
  475. Vergleicht den Abschnitt <code>$part</code> des Datums <code>$date</code> mit
  476. dem Zeitpunkt des Objektes. Gibt 0 zurück wenn sie gleich sind, 1 wenn wenn
  477. der Abschnitt dieses Objektes früher war als der Abschnitt von $date und
  478. andernfalls -1.
  479. </para>
  480. </entry>
  481. </row>
  482. </tbody>
  483. </tgroup>
  484. </table>
  485. </sect3>
  486. </sect2>
  487. <sect2 id="zend.date.others.comparison">
  488. <title>Vergleichen von Daten</title>
  489. <para>
  490. Die folgenden Basisoperationen haben keine vergleichbaren vereinfachten Methoden für
  491. Datumsabschnitt wie beschrieben unter <xref linkend="zend.date.overview" />.
  492. </para>
  493. <table id="zend.date.others.comparison.table">
  494. <title>Methoden zum Vergleichen von Daten</title>
  495. <tgroup cols="2">
  496. <thead>
  497. <row>
  498. <entry>Methoden</entry>
  499. <entry>Beschreibung</entry>
  500. </row>
  501. </thead>
  502. <tbody>
  503. <row>
  504. <entry>equals()</entry>
  505. <entry>
  506. <para>
  507. <emphasis role="strong">equals($date, $part = null, $locale = null)</emphasis>
  508. </para>
  509. <para>
  510. Gibt true zurück wenn der Abschnitt <code>$part</code> von <code>$date</code> der
  511. das Gebietsschema <code>$locale</code> hat, der gleiche ist wie der Abschnitt
  512. <code>$part</code> vom Datum des Objektes, andernfalls false
  513. </para>
  514. </entry>
  515. </row>
  516. <row>
  517. <entry>isEarlier()</entry>
  518. <entry>
  519. <para>
  520. <emphasis role="strong">isEarlier($date, $part = null, $locale = null)</emphasis>
  521. </para>
  522. <para>
  523. Gibt true zurück wenn der Abschnitt <code>$part</code> vom Datum des Objektes
  524. früher ist als der Abschnitt <code>$part</code> von <code>$date</code> der
  525. das Gebietsschema <code>$locale</code> hat
  526. </para>
  527. </entry>
  528. </row>
  529. <row>
  530. <entry>isLater()</entry>
  531. <entry>
  532. <para>
  533. <emphasis role="strong">isLater($date, $part = null, $locale = null)</emphasis>
  534. </para>
  535. <para>
  536. Gibt true zurück wenn der Abschnitt <code>$part</code> vom Datum des Objektes
  537. später ist als der Abschnitt <code>$part</code> von <code>$date</code> der
  538. das Gebietsschema <code>$locale</code> hat
  539. </para>
  540. </entry>
  541. </row>
  542. <row>
  543. <entry>isToday()</entry>
  544. <entry>
  545. <para>
  546. <emphasis role="strong">isToday()</emphasis>
  547. </para>
  548. <para>
  549. Testet ob Jahr, Monat und Tag des heutigen Datums mit dem Datumswert des
  550. Objektes übereinstimmen, wenn die Zeitzone des Objektes verwendet wird.
  551. </para>
  552. </entry>
  553. </row>
  554. <row>
  555. <entry>isTomorrow()</entry>
  556. <entry>
  557. <para>
  558. <emphasis role="strong">isTomorrow()</emphasis>
  559. </para>
  560. <para>
  561. Testet ob Jahr, Monat und Tag des morgigen Datums mit dem Datumswert des
  562. Objektes übereinstimmen, wenn die Zeitzone des Objektes verwendet wird.
  563. </para>
  564. </entry>
  565. </row>
  566. <row>
  567. <entry>isYesterday()</entry>
  568. <entry>
  569. <para>
  570. <emphasis role="strong">isYesterday()</emphasis>
  571. </para>
  572. <para>
  573. Testet ob Jahr, Monat und Tag des gestrigen Datums mit dem Datumswert des
  574. Objektes übereinstimmen, wenn die Zeitzone des Objektes verwendet wird.
  575. </para>
  576. </entry>
  577. </row>
  578. <row>
  579. <entry>isLeapYear()</entry>
  580. <entry>
  581. <para>
  582. <emphasis role="strong">isLeapYear()</emphasis>
  583. </para>
  584. <para>
  585. <code>isLeapYear()</code> kann benutzt werden ob zu prüfen ob das aktuelle
  586. Objekt ein Schaltjahr ist. Sonst kann Zend_Date::checkLeapYear($year) benutzt
  587. werden um das Jahr $year zu prüfen, welches eine Zeichenkette, ein Integer
  588. oder eine Instanz von <classname>Zend_Date</classname> sein kann. Ist das Jahr ein Schaltjahr ?
  589. </para>
  590. </entry>
  591. </row>
  592. <row>
  593. <entry>isDate()</entry>
  594. <entry>
  595. <para>
  596. <emphasis role="strong">isDate($date, $format = null, $locale = null)</emphasis>
  597. </para>
  598. <para>
  599. This method checks if a given date is a real date and returns true if all checks are ok.
  600. It works like PHP's checkdate() function but can also check for localized month names and
  601. for dates extending the range of checkdate()
  602. false
  603. </para>
  604. </entry>
  605. </row>
  606. </tbody>
  607. </tgroup>
  608. </table>
  609. </sect2>
  610. <sect2 id="zend.date.others.gettingparts">
  611. <title>Getting Dates and Date Parts</title>
  612. <para>
  613. Several methods support retrieving values related to a <classname>Zend_Date</classname> instance.
  614. </para>
  615. <table id="zend.date.others.gettingparts.table">
  616. <title>Date Output Methods</title>
  617. <tgroup cols="2">
  618. <thead>
  619. <row>
  620. <entry>Method</entry>
  621. <entry>Explanation</entry>
  622. </row>
  623. </thead>
  624. <tbody>
  625. <row>
  626. <entry>toString()</entry>
  627. <entry>
  628. <para>
  629. <emphasis role="strong">toString($format = null, $locale = null)</emphasis>
  630. </para>
  631. <para>
  632. Direkt aufzurufen oder über die magische Methode <code>__toString()</code>. Die
  633. <code>toString()</code> Methode formatiert automatisch den Wert des Datumsobjektes
  634. anhand der Konventionen des Gebietsschemas des Objektes, oder einem optional definierten
  635. Gebietsschema <code>$locale</code>. Für eine Liste von unterstützten Formatcodes
  636. kann hier nachgeschaut werden: <xref linkend="zend.date.constants.selfdefinedformats" />.
  637. </para>
  638. </entry>
  639. </row>
  640. <row>
  641. <entry>toArray()</entry>
  642. <entry>
  643. <para>
  644. <emphasis role="strong">toArray()</emphasis>
  645. </para>
  646. <para>
  647. Gibt eine Array Representation des ausgewählten Datums anhand der Konventionen des
  648. Gebietsschemas zurück. Das zurückgegebene Array is identisch zu PHP's
  649. <ulink url="http://php.net/getdate">getdate()</ulink> Funktion und beinhaltet:
  650. </para>
  651. <para>
  652. <itemizedlist>
  653. <listitem>
  654. <para>
  655. Tag als Zahl mit '<emphasis role="strong">day</emphasis>'
  656. (<classname>Zend_Date::DAY_SHORT</classname>)
  657. </para>
  658. </listitem>
  659. <listitem>
  660. <para>
  661. Monat als Zahl mit '<emphasis role="strong">month</emphasis>'
  662. (<classname>Zend_Date::MONTH_SHORT</classname>)
  663. </para>
  664. </listitem>
  665. <listitem>
  666. <para>
  667. Jahr als '<emphasis role="strong">year</emphasis>'
  668. (<classname>Zend_Date::YEAR</classname>)
  669. </para>
  670. </listitem>
  671. <listitem>
  672. <para>
  673. Stunde als '<emphasis role="strong">hour</emphasis>'
  674. (<classname>Zend_Date::HOUR_SHORT</classname>)
  675. </para>
  676. </listitem>
  677. <listitem>
  678. <para>
  679. Minute als '<emphasis role="strong">minute</emphasis>'
  680. (<classname>Zend_Date::MINUTE_SHORT</classname>)
  681. </para>
  682. </listitem>
  683. <listitem>
  684. <para>
  685. Sekunde als '<emphasis role="strong">second</emphasis>'
  686. (<classname>Zend_Date::SECOND_SHORT</classname>)
  687. </para>
  688. </listitem>
  689. <listitem>
  690. <para>
  691. Abgekürzte Zeitzone als '<emphasis role="strong">timezone</emphasis>'
  692. (<classname>Zend_Date::TIMEZONE</classname>)
  693. </para>
  694. </listitem>
  695. <listitem>
  696. <para>
  697. Unix Zeitpunkt als '<emphasis role="strong">timestamp</emphasis>'
  698. (<classname>Zend_Date::TIMESTAMP</classname>)
  699. </para>
  700. </listitem>
  701. <listitem>
  702. <para>
  703. Wochentag als Zahl mit '<emphasis role="strong">weekday</emphasis>'
  704. (<classname>Zend_Date::WEEKDAY_DIGIT</classname>)
  705. </para>
  706. </listitem>
  707. <listitem>
  708. <para>
  709. Tag des Jahres als '<emphasis role="strong">dayofyear</emphasis>'
  710. (<classname>Zend_Date::DAY_OF_YEAR</classname>)
  711. </para>
  712. </listitem>
  713. <listitem>
  714. <para>
  715. Woche als '<emphasis role="strong">week</emphasis>'
  716. (<classname>Zend_Date::WEEK</classname>)
  717. </para>
  718. </listitem>
  719. <listitem>
  720. <para>
  721. Abstand der Zeitzone zu GMT als
  722. '<emphasis role="strong">gmtsecs</emphasis>'
  723. (<classname>Zend_Date::GMT_SECS</classname>)
  724. </para>
  725. </listitem>
  726. </itemizedlist>
  727. </para>
  728. </entry>
  729. </row>
  730. <row>
  731. <entry>toValue()</entry>
  732. <entry>
  733. <para>
  734. <emphasis role="strong">toValue($part = null)</emphasis>
  735. </para>
  736. <para>
  737. Gibt eine Integer Repräsentation des ausgewählten Datumsabschnittes <code>$part</code>
  738. zurück anhand der Konventionen des Gebietsschemas des Objektes. Gibt <code>false</code>
  739. zurück wenn der Abschnitt <code>$part</code> ein nicht numerischer Wert ist, wie
  740. <classname>Zend_Date::MONTH_NAME_SHORT</classname>. <emphasis role="strong">NOTIZ:</emphasis>
  741. Diese Methode ruft <link linkend="id.date.basic.operations"><code>get()</code>
  742. </link> auf und castet das Ergebnis einen PHP Integer Wert, welcher unerwartete Ergebnisse
  743. liefern wird, wenn <code>get()</code> eine numerische Zeichenkette zurückgibt die
  744. eine Zahl enthält welche zu groß für einen PHP Integer Wert auf Ihrem System ist.
  745. Stattdessen sollte <code>get()</code> benutzt werden.
  746. </para>
  747. </entry>
  748. </row>
  749. <row>
  750. <entry>
  751. <link linkend="id.date.basic.operations">get()</link>
  752. </entry>
  753. <entry>
  754. <para>
  755. <emphasis role="strong">get($part = null, $locale = null)</emphasis>
  756. </para>
  757. <para>
  758. Diese Methode gibt den Abschnitt <code>$part</code> vom Datum des Objektes,
  759. welches mit dem Gebietsschema <code>$locale</code> lokalisiert wurde, als
  760. formatierten String oder Integer zurück. Für weitere Informationen hier weiterlesen:
  761. <xref linkend="id.date.basic.operations" />.
  762. </para>
  763. </entry>
  764. </row>
  765. <row>
  766. <entry>now()</entry>
  767. <entry>
  768. <para>
  769. <emphasis role="strong">now($locale = null)</emphasis>
  770. </para>
  771. <para>
  772. Diese bequemliche Funktion ist identisch mit <code>new Zend_Date()</code>.
  773. Sie gibt das aktuelle Datum als <classname>Zend_Date</classname> Objekt zurück, welches das
  774. Gebietsschema <code>$locale</code> hat.
  775. </para>
  776. </entry>
  777. </row>
  778. </tbody>
  779. </tgroup>
  780. </table>
  781. </sect2>
  782. <sect2 id="zend.date.others.fractions">
  783. <title>Arbeiten mit Sekundenbruchteilen</title>
  784. <para>
  785. Viele Methoden unterstützen es, Werte relativ zu einer <classname>Zend_Date</classname> Instanz zu erhalten.
  786. </para>
  787. <table id="zend.date.others.fractions.table">
  788. <title>Methoden zur Datumsausgabe</title>
  789. <tgroup cols="2">
  790. <thead>
  791. <row>
  792. <entry>Methode</entry>
  793. <entry>Erklärung</entry>
  794. </row>
  795. </thead>
  796. <tbody>
  797. <row>
  798. <entry>
  799. <para>
  800. <emphasis role="strong">getFractionalPrecision()</emphasis>
  801. </para>
  802. </entry>
  803. <entry>Gibt die Genauigkeit des Sekundenbruchteils zurück</entry>
  804. </row>
  805. <row>
  806. <entry>
  807. <para>
  808. <emphasis role="strong">setFractionalPrecision()</emphasis>
  809. </para>
  810. </entry>
  811. <entry>Setzt die Genauigkeit des Sekundenbruchteils</entry>
  812. </row>
  813. </tbody>
  814. </tgroup>
  815. </table>
  816. </sect2>
  817. <sect2 id="zend.date.other.sun">
  818. <title>Sonnenaufgang / Sonnenuntergang</title>
  819. <para>
  820. Drei Methoden geben Zugriff auf geographisch lokalisierte Informationen über die Sonne was die Zeit
  821. für Sonnenaufgang und Sonnenuntergang beinhaltet.
  822. </para>
  823. <table id="zend.date.other.sun.table">
  824. <title>Gewöhliche Methoden</title>
  825. <tgroup cols="2">
  826. <thead>
  827. <row>
  828. <entry>Methode</entry>
  829. <entry>Erklärung</entry>
  830. </row>
  831. </thead>
  832. <tbody>
  833. <row>
  834. <entry>
  835. <para>
  836. <emphasis role="strong">getSunrise($location)</emphasis>
  837. </para>
  838. </entry>
  839. <entry>Gibt die Zeit des Sonnenaufgangs dieses Datums zurück</entry>
  840. </row>
  841. <row>
  842. <entry>
  843. <para>
  844. <emphasis role="strong">getSunset($location)</emphasis>
  845. </para>
  846. </entry>
  847. <entry>Gibt die Zeit des Sonnenuntergangs dieses Datums zurück</entry>
  848. </row>
  849. <row>
  850. <entry>
  851. <para>
  852. <emphasis role="strong">getSunInfo($location)</emphasis>
  853. </para>
  854. </entry>
  855. <entry>Gibt ein Array mit den Sonnendaten des Datums zurück</entry>
  856. </row>
  857. </tbody>
  858. </tgroup>
  859. </table>
  860. </sect2>
  861. </sect1>
  862. <!--
  863. vim:se ts=4 sw=4 et:
  864. -->