Zend_Date-Overview.xml 53 KB

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