Zend_Date-Creation.xml 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <sect1 id="zend.date.creation">
  2. <title>生成日期</title>
  3. <para>
  4. 因为需求的不同,<code>Zend_Date</code> 提供了若干不同的办法来创建自己的实例,本章将介绍最方便的办法。
  5. </para>
  6. <sect2 id="zend.date.creation.actual">
  7. <title>生成当前日期</title>
  8. <para>
  9. 最简单的创建日期对象是生成当前的日期,通过创建<emphasis role="strong">new Zend_Date()</emphasis>的实例
  10. 或使用静态方法 <emphasis role="strong">Zend_Date::now()</emphasis> 都可以,它们都返回当前日期的 <code>Zend_Date</code> 实例。
  11. 当前的日期总是包括当前的日期和时间以及当前的时区。
  12. </para>
  13. <example id="zend.date.creation.actual.example-1">
  14. <title>通过实例生成日期</title>
  15. <para>
  16. 通过创建一个新的实例来生成日期意味着你不需要给出参数。当然有若干个参数我们将以后来描述,但一般
  17. 来说这是最简单和最常用的方法来获得当期日期为 <code>Zend_Date</code> 的实例。
  18. </para>
  19. <programlisting role="php"><![CDATA[
  20. $date = new Zend_Date();
  21. ]]>
  22. </programlisting>
  23. </example>
  24. <example id="zend.date.creation.actual.example-2">
  25. <title> 静态日期生成 </title>
  26. <para>
  27. 有时候用静态方法生成日期更容易。因此,你可以使用 <emphasis role="strong"><code>now()</code></emphasis> 方法,
  28. 它返回 <code>Zend_Date</code> 的一个新实例,就象你用 <code>new Zend_Date()</code> 一样。
  29. 但它将总返回当前日期并且不能用可选的参数修改。
  30. </para>
  31. <programlisting role="php"><![CDATA[
  32. $date = Zend_Date::now();
  33. ]]>
  34. </programlisting>
  35. </example>
  36. </sect2>
  37. <sect2 id="zend.date.creation.database">
  38. <title> 从数据库生成日期 </title>
  39. <para>
  40. 数据库常用来存储数据。问题是,每个数据库用不同的方式输出数据。<code>MsSQL</code> 数据库和 <code>MySQL</code>
  41. 数据库的日期标准就不一样。为简化起见,<code>Zend_Date</code> 可以很容易从数据库数据生成日期。
  42. </para>
  43. <para>
  44. 当然每个数据库都可以说把输出转换成定义好的特殊值。例如,你可以把 <code>datetime</code> 转换成输出分钟值。
  45. 但这很耗时并且当查询数据库时你确实需要用其它方法来处理日期。
  46. </para>
  47. <para>
  48. 所以我们有一个快速并方便的方法从数据库值生成日期。
  49. </para>
  50. <example id="zend.date.creation.database.example-1">
  51. <title> 快速从数据库生成日期 </title>
  52. <para>
  53. 众所周知,所有的数据库都想尽可能快地查询数据,它们与生俱来就要快速响应。从数据库取得日期的最快
  54. 方法是使用unix时间戳。所有数据库在内部把日期值都存成时间戳(不是unix时间戳)。这意味着通过查询生
  55. 成时间戳要比转换成其它格式快。
  56. </para>
  57. <programlisting role="php"><![CDATA[
  58. // SELECT UNIX_TIMESTAMP(my_datetime_column) FROM my_table
  59. $date = new Zend_Date($unixtimestamp, Zend_Date::TIMESTAMP);
  60. ]]>
  61. </programlisting>
  62. </example>
  63. <example id="zend.date.creation.database.example-2">
  64. <title> 从数据库方便地生成日期 </title>
  65. <para>
  66. 即使是你乍一看它们都相同,但是所有数据库的标准输出还是不一样的。但它们都是 <code>ISO</code> 标准的一部分
  67. 并解释它,所以最容易的生成日期的方法是使用 <code>Zend_Date::ISO_8601</code>。
  68. 例如数据库里众所周知的 <code>MySQL</code> 和 <code>MsSQL</code> 被 <code>Zend_Date::ISO_8601</code> 认可。
  69. 但所有数据库也都可以返回一个 <code>ISO 8601</code> 表示的日期列。
  70. <code>ISO 8601</code> 一个巨大的有点是人类可读。缺点是 <code>ISO 8601</code> 比 unix 时间戳需要更多
  71. 的时间来处理,但也应该知道 unix 时间戳只支持 1970年1月1日以后的日期。
  72. </para>
  73. <programlisting role="php"><![CDATA[
  74. // SELECT datecolumn FROM my_table
  75. $date = new Zend_Date($datecolumn, Zend_Date::ISO_8601);
  76. ]]>
  77. </programlisting>
  78. </example>
  79. </sect2>
  80. <sect2 id="zend.date.creation.array">
  81. <title> 从数组生成日期 </title>
  82. <para>
  83. 日期也可以从数组生成,这是个简单并容易的方法,使用的数组键是:
  84. </para>
  85. <para>
  86. <itemizedlist mark='opencircle'>
  87. <listitem>
  88. <para>
  89. <emphasis role="strong">日</emphasis>: 日期的天数
  90. </para>
  91. </listitem>
  92. <listitem>
  93. <para>
  94. <emphasis role="strong">月</emphasis>: 日期的月数
  95. </para>
  96. </listitem>
  97. <listitem>
  98. <para>
  99. <emphasis role="strong">年</emphasis>: full year of the date
  100. </para>
  101. </listitem>
  102. <listitem>
  103. <para>
  104. <emphasis role="strong">小时</emphasis>: 小时数
  105. </para>
  106. </listitem>
  107. <listitem>
  108. <para>
  109. <emphasis role="strong">分钟</emphasis>: 分钟数
  110. </para>
  111. </listitem>
  112. <listitem>
  113. <para>
  114. <emphasis role="strong">秒</emphasis>: 秒数
  115. </para>
  116. </listitem>
  117. </itemizedlist>
  118. </para>
  119. <example id="zend.date.creation.array.example">
  120. <title> 通过数组生成日期 </title>
  121. <para>
  122. 一般地你需要给出一个完整的日期数组用于新的日期实例的生成,但当你没有给出所有值,未给出的值就是零。
  123. 这意味着如果没有给出小时值,那么就用 <emphasis role="strong">0</emphasis> 小时。
  124. </para>
  125. <programlisting role="php"><![CDATA[
  126. $datearray = array('year' => 2006,
  127. 'month' => 4,
  128. 'day' => 18,
  129. 'hour' => 12,
  130. 'minute' => 3,
  131. 'second' => 10);
  132. $date = new Zend_Date($datearray);
  133. ]]>
  134. </programlisting>
  135. <programlisting role="php"><![CDATA[
  136. $datearray = array('year' => 2006, 'month' => 4, 'day' => 18);
  137. $date = new Zend_Date($datearray);
  138. ]]>
  139. </programlisting>
  140. </example>
  141. </sect2>
  142. </sect1>
  143. <!--
  144. vim:se ts=4 sw=4 et:
  145. -->