9.5. 生成日期
因为需求的不同,Zend_Date
提供了若干不同的办法来创建自己的实例,本章将介绍最方便的办法。
9.5.1. 生成当前日期
最简单的创建日期对象是生成当前的日期,通过创建new Zend_Date()的实例
或使用静态方法 Zend_Date::now() 都可以,它们都返回当前日期的 Zend_Date
实例。
当前的日期总是包括当前的日期和时间以及当前的时区。
例 9.10. 通过实例生成日期
通过创建一个新的实例来生成日期意味着你不需要给出参数。当然有若干个参数我们将以后来描述,但一般
来说这是最简单和最常用的方法来获得当期日期为 Zend_Date
的实例。
$date = new Zend_Date();
例 9.11. 静态日期生成
有时候用静态方法生成日期更容易。因此,你可以使用 now()
方法,
它返回 Zend_Date
的一个新实例,就象你用 new Zend_Date()
一样。
但它将总返回当前日期并且不能用可选的参数修改。
$date = Zend_Date::now();
9.5.2. 从数据库生成日期
数据库常用来存储数据。问题是,每个数据库用不同的方式输出数据。MsSQL
数据库和 mysql
数据库的日期标准就不一样。为简化起见,Zend_Date
可以很容易从数据库数据生成日期。
当然每个数据库都可以说把输出转换成定义好的特殊值。例如,你可以把 datetime
转换成输出分钟值。
但这很耗时并且当查询数据库时你确实需要用其它方法来处理日期。
所以我们有一个快速并方便的方法从数据库值生成日期。
例 9.12. 快速从数据库生成日期
众所周知,所有的数据库都想尽可能快地查询数据,它们与生俱来就要快速响应。从数据库取得日期的最快 方法是使用unix时间戳。所有数据库在内部把日期值都存成时间戳(不是unix时间戳)。这意味着通过查询生 成时间戳要比转换成其它格式快。
// SELECT UNIX_TIMESTAMP(my_datetime_column) FROM my_table $date = new Zend_Date($unixtimestamp, Zend_Date::TIMESTAMP);
例 9.13. 从数据库方便地生成日期
即使是你乍一看它们都相同,但是所有数据库的标准输出还是不一样的。但它们都是 ISO
标准的一部分
并解释它,所以最容易的生成日期的方法是使用 Zend_Date::ISO_8601
。
例如数据库里众所周知的 MySQL
和 MsSQL
被 Zend_Date::ISO_8601
认可。
但所有数据库也都可以返回一个 ISO 8601
表示的日期列。
ISO 8601
一个巨大的有点是人类可读。缺点是 ISO 8601
比 unix 时间戳需要更多
的时间来处理,但也应该知道 unix 时间戳只支持 1970年1月1日以后的日期。
// SELECT datecolumn FROM my_table $date = new Zend_Date($datecolumn, Zend_Date::ISO_8601);
9.5.3. 从数组生成日期
日期也可以从数组生成,这是个简单并容易的方法,使用的数组键是:
日: 日期的天数
月: 日期的月数
年: full year of the date
小时: 小时数
分钟: 分钟数
秒: 秒数
例 9.14. 通过数组生成日期
一般地你需要给出一个完整的日期数组用于新的日期实例的生成,但当你没有给出所有值,未给出的值就是零。 这意味着如果没有给出小时值,那么就用 0 小时。
$datearray = array('year' => 2006, 'month' => 4, 'day' => 18, 'hour' => 12, 'minute' => 3, 'second' => 10); $date = new Zend_Date($datearray);
$datearray = array('year' => 2006, 'month' => 4, 'day' => 18); $date = new Zend_Date($datearray);