12.5. 生成日期

因为需求的不同,Zend_Date 提供了若干不同的办法来创建自己的实例,本章将介绍最方便的办法。

12.5.1. 生成当前日期

最简单的创建日期对象是生成当前的日期,通过创建new Zend_Date()的实例 或使用静态方法 Zend_Date::now() 都可以,它们都返回当前日期的 Zend_Date 实例。 当前的日期总是包括当前的日期和时间以及当前的时区。

例 12.10. 通过实例生成日期

通过创建一个新的实例来生成日期意味着你不需要给出参数。当然有若干个参数我们将以后来描述,但一般 来说这是最简单和最常用的方法来获得当期日期为 Zend_Date 的实例。

$date = new Zend_Date();

            

例 12.11.  静态日期生成

有时候用静态方法生成日期更容易。因此,你可以使用 now() 方法, 它返回 Zend_Date 的一个新实例,就象你用 new Zend_Date() 一样。 但它将总返回当前日期并且不能用可选的参数修改。

$date = Zend_Date::now();

            

12.5.2.  从数据库生成日期

数据库常用来存储数据。问题是,每个数据库用不同的方式输出数据。MsSQL 数据库和 MySQL 数据库的日期标准就不一样。为简化起见,Zend_Date 可以很容易从数据库数据生成日期。

当然每个数据库都可以说把输出转换成定义好的特殊值。例如,你可以把 datetime 转换成输出分钟值。 但这很耗时并且当查询数据库时你确实需要用其它方法来处理日期。

所以我们有一个快速并方便的方法从数据库值生成日期。

例 12.12.  快速从数据库生成日期

众所周知,所有的数据库都想尽可能快地查询数据,它们与生俱来就要快速响应。从数据库取得日期的最快 方法是使用unix时间戳。所有数据库在内部把日期值都存成时间戳(不是unix时间戳)。这意味着通过查询生 成时间戳要比转换成其它格式快。

// SELECT UNIX_TIMESTAMP(my_datetime_column) FROM my_table
$date = new Zend_Date($unixtimestamp, Zend_Date::TIMESTAMP);

            

例 12.13.  从数据库方便地生成日期

即使是你乍一看它们都相同,但是所有数据库的标准输出还是不一样的。但它们都是 ISO 标准的一部分 并解释它,所以最容易的生成日期的方法是使用 Zend_Date::ISO_8601。 例如数据库里众所周知的 MySQLMsSQLZend_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);

            

12.5.3.  从数组生成日期

日期也可以从数组生成,这是个简单并容易的方法,使用的数组键是:

  • : 日期的天数

  • : 日期的月数

  • : full year of the date

  • 小时: 小时数

  • 分钟: 分钟数

  • : 秒数

例 12.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);