第 12 章 Zend_Date

目录

12.1. 简介
12.1.1. 永远设置缺省时区
12.1.2. 为什么使用 Zend_Date?
12.2. 操作理论
12.2.1. 内部(Internals)
12.3. 基本方法
12.3.1. 当前日期
12.3.2. Zend_Date 的例子
12.3.2.1. 输出日期
12.3.2.2. 设置日期
12.3.2.3. 加减日期
12.3.2.4. 比较日期
12.4. Zend_Date API 概述
12.4.1. Zend_Date 选项
12.4.1.1. 选择日期格式类型
12.4.1.2. DST 和日期数学
12.4.1.3. 月份计算
12.4.1.4. 用 Zend_Cache 加速日期本地化和标准化
12.4.1.5. 用 Zend_TimeSync 同步时间戳
12.4.2. 使用日期值
12.4.3. Basic Zend_Date Operations Common to Many Date Parts
12.4.3.1. 日期部件列表
12.4.3.2. List of Date Operations 日期操作列表
12.4.4. 比较日期
12.4.5. 获取日期和日期部件
12.4.6. 使用秒的片段
12.4.7. 日出 / 日落
12.5. 生成日期
12.5.1. 生成当前日期
12.5.2. 从数据库生成日期
12.5.3. 从数组生成日期
12.6. 一般日期函数的常量
12.6.1. 使用常数
12.6.2. 所有常数列表
12.6.3. 自定义 ISO 输出格式
12.6.4. 使用 PHP 的 date() 格式指定器的自定义输出格式
12.7. Working 范例
12.7.1. 检查日期
12.7.2. 日出和日落
12.7.3. 时区

12.1.  简介

Zend_Date 组件提供了一个详细而简单的 API 用来处理日期和时间。它的方法接受广泛的信息,包括日期部分、 各种组合产生的许多功能和超出 PHP 日期相关函数的可能行。对于最新的手册,请参考 在线手册(及时和 Subversion 同步)

虽然保持简单是我们的目标,但是日期和时间的本地化修改、合并和比较是不可避免的复杂。 日期、还有时间在不同的地方有不同的写法。例如,一些地方月在前面,一些地方年在前面。 关于更多处理本地化和标准化的信息,请参考 Zend_Locale

Zend_Date 在许多语言中也支持月名的缩写。 Zend_Locale 简化本地的月和星期名到时间戳的标准化。 这样,它们在其它地区就显示为本地化的格式。 Zend_Locale

12.1.1.  永远设置缺省时区

在 PHP 或 Zend Framework 中使用任何日期相关的函数之前, 通过使用 date.timezone php.ini 的设置来设置 TZ 环境变量,或者使用 date_default_timezone_set()。 首先确保你的程序有个正确的缺省时区, 在 PHP 中,通过根据用户的期望设置一个缺省的时区,我们可以调整所有日期和时间相关的函数为特定的用户来工作。 时区设置的全部列表,请参考 CLDR Timezone Identifier List

例 12.1.  设置一个缺省的时区

 
// timezone for an American in California                
date_default_timezone_set('America/Los_Angeles');
// timezone for a German in Germany
date_default_timezone_set('Europe/Berlin');
        
                


当创建 Zend_Date 实例时,它们的时区就自动地变成当前缺省时区! 这样,时区设置将有效地解决任何夏时制(DST)问题,不需要显式地指定夏时制。

请记住时区 UTCGMT 不包括夏令时。 这意味着即使你定义了 Zend_Date 工作于 DST,对于设置为 UTC 或 GMT 的 Zend_Date 实例,它也自动切换回来。

12.1.2.  为什么使用 Zend_Date?

Zend_Date 提供下列功能,它扩展了 PHP 日期函数的功能:

  • 简单的 API

    Zend_Date 提供了非常简单的 API,它结合了四种编程语言中的最好的日期/时间函数。 例如在一行中可以加或者比较两个时间。

  • 完全国际化

    支持超过 130 中语言的月和星期名的全称和缩写。以和地方相关联的常规的格式支持使用本地化月和星期名的输入和输出的方法。

  • 无限制的时间戳

    尽管 PHP 5.2 声明 “有效的时间戳范围一般是从 1901年12月13日星期五20:45:54 GMT 到 2038年1月19日星期二 2038 03:14:07 GMT”, Zend_Date 在 BCMath 扩展的帮助下,还是支持一个几乎无限制的范围。 如果 BCMath 不可用,Zend_Date 将只把对时间戳的支持范围减小到你的服务器所支持的 float 类型的范围。 “浮点数的大小和平台无关,虽然最大数 ~1.8e308 是带有大概精确到 14 位十进制数的一个值(64位 IEEE 格式)”[http://www.php.net/float]。 另外,由于浮点数本身的限制,浮点数的误差可能会带来计算的错误。为避免这个问题,如果 BCMath 扩展可用,ZF I18n 组件就使用它。

  • 支持 ISO_8601 日期规范

    支持ISO_8601 日期规范。即使部分兼容 ISO_8601 日期规范将被识别。当和数据库一起使用时,这些日期格式特别有用。 例如,即使 MsSQL 和 MySQL 有点不同,Zend_Date 都用 Zend_Date::ISO_8601 格式规范常量来支持它们。当日期字符串符合 "Y/m/d" or "Y-m-d H:i:s" 根据 PHP date() 格式令牌,使用 Zend_Date 的内置的 ISO 8601 日期格式。

  • 计算日出和日落

    对于任何地方的一天,可以显示日出和日落的时间,这样你就不会错过一秒的白天时间来工作于你喜欢的 PHP 项目 :)