Zend_Date API 概述
虽然 Zend_Date 选项选择日期格式类型
有若干方法使用日期格式串,和 PHP 的 DST 和日期数学
当处理日期时,有时候需要考虑 DST(夏令时)更改的影响,一般是加上或减去一个小时。例如,在DST更改前加
上月份到日期,如果结果是在DST更改之后,那么结果将会多或少一个小时。对于边界日期,如一个月的第一天或
最后一天的午夜,添加足够的月份数来跨国日期边界会导致日期丢失一个小时并变成前面月份的最后一个小时,出现 "off by 1" 错误。
为了避免这个情况发生,通过使用
如果在 月份计算
当从一个日期加减月份时,如果原来的日期接近月末,结果在某月的某天可能不是所期望的。
例如,当 1月31日加上1个月是,熟悉 SQL的人将以为结果是 2月28日。另一方面,熟悉 Excel 和 OpenOffice的人将认为结果是 3月3日。
这种问题只发生在这样的情况下:结果的月份里没有原来的月份的某天。
对于 ZF 的开发者来说,使用 用 Zend_Cache 加速日期本地化和标准化
通过使用 用 Zend_TimeSync 同步时间戳
一般来说服务器和计算机上的时钟都不相同。 使用日期值
一旦通过生成
要小心不同时区之间的对象的混合和日期部件的匹配操作,它可能会产生不期望的结果,除非运算只和时间戳相关。
除了上述的情况,
大部分方法需要一个常量来选择需要的日期的 Example #1 用户指定的日期输入格式 $date1 = new Zend_Date('Feb 31, 2007', null, 'en_US'); echo $date1, "\n"; // outputs "Mar 3, 2007 12:00:00 AM" $date2 = new Zend_Date('Feb 31, 2007', Zend_Date::DATES, 'en_US'); echo $date2, "\n"; // outputs "Mar 3, 2007 12:00:00 AM" // strictly restricts interpretation to specified format $date3 = new Zend_Date('Feb 31, 2007', 'MM.dd.yyyy'); echo $date3, "\n"; // outputs "Mar 3, 2007 12:00:00 AM"
如果提供了可选的
从 Zend Framework 1.7.0 开始, // in your bootstrap file $locale = new Zend_Locale('de_AT'); Zend_Registry::set('Zend_Locale', $locale); // somewhere in your application $date = new Zend_Date('31.Feb.2007'); Basic |
日期部件 | 解释 |
---|---|
» 时间戳 | UNIX 时间戳,表示从 January 1st, 1970 00:00:00 GMT/UTC 开始的秒数。 |
» 年 | 罗马教皇日历年(如 2006) |
» 月 | 罗马教皇日历月(1-12, 支持本地化名字) |
» 24 小时时钟 | 一天的小时数(0-23),表示从一天开始算起过去的小时数。 |
» 分钟 | 一小时的分钟数(0-59),表示从一小时开始算起过去的分钟数。 |
» 秒 | 一分钟的秒数(0-59),表示从一分钟开始算起过去的秒数。 |
» 毫秒 |
毫秒表示千分之一秒(0-999)。Zend_Date 支持两个另外的方法来支持小于秒的时间单位。
缺省地,Zend_Date 实例精确到毫秒,如 getFractionalPrecision() ,我们用 setFractionalPrecision($precision) 来修改精确度。
然而,因为 Zend_Date 使用 » microtime() ,精确度实际上限制到微秒。
|
» 天 |
如果 $date 操作数是 Zend_Date 的实例或一个数字字符串,Zend_Date::DAY_SHORT 是从 $date 里取出。
否则,根据这些文档 Zend_Date::WEEKDAY_NARROW 、
Zend_Date::WEEKDAY_NAME 、 Zend_Date::WEEKDAY_SHORT 和 Zend_Date::WEEKDAY (假定为罗马教皇日历)的惯例尝试从天里取出。
|
» 星期 |
如果 $date 操作数是 Zend_Date 的实例或一个数字字符串,Zend_Date::WEEK 是从 $date 里取出。
否则产生一个异常。(假定为罗马教皇日历)
|
日期 |
如果 $date 操作数是 Zend_Date 的实例或一个数字字符串,Zend_Date::DAY_MEDIUM 是从 $date 里取出。
否则就尝试格式化 $date 字符串成 Zend_Date::DATE_MEDIUM 日期格式。
Zend_Date::DAY_MEDIUM 格式根据地方的不同而不同。
|
Weekday |
Weekdays 表示为从 0 (星期日) 到 6 (星期六).
如果 $date 操作数是 Zend_Date 的实例或一个数字字符串,Zend_Date::WEEKDAY_DIGIT 是从 $date 里取出。
否则,根据这些文档 Zend_Date::WEEKDAY_NARROW 、
Zend_Date::WEEKDAY_NAME 、 Zend_Date::WEEKDAY_SHORT 和 Zend_Date::WEEKDAY (假定为罗马教皇日历)的惯例尝试从天里取出。
|
DayOfYear |
在 Zend_Date ,一年中的天表示从一年开始发生的日历天数(0-365)。和其它上述单元一样,小数四舍五入到最近的整数。(假定为罗马教皇日历)
|
» Arpa |
我们支持 Arpa 日期(如 RFC 822 格式日期)。输出使用 "GMT" 或 "Local differential hours+min" 格式(见第5节的 RFC 822)。
在 PHP 5.2.2 以前,一起使用 DATE_RFC822 常量和 PHP 日期函数有时会产生 » 不正确的结果。
Zend_Date 的结果是正确的。例如 Mon, 31 Dec 06 23:59:59 GMT 。
|
» Iso |
对于输出只支持完全的 ISO 8601 日期。例如:2009-02-14T00:31:30+01:00
|
如果 合适的常量 用于 $part
参数,
对特定日期部件,下列基本操作可用来代替方便操作。
基本操作 | 解释 |
---|---|
get() |
get($part = null, $locale = null)
使用 |
set() |
set($date, $part = null, $locale = null)
对从带有 |
add() |
add($date, $part = null, $locale = null)
加上带有 |
sub() |
sub($date, $part = null, $locale = null)
从当前对象的日期减去 加上带有 |
copyPart() |
copyPart($part, $locale = null)
返回一个克隆的对象,只带有拷贝到克隆的对象的日期的 |
compare() |
compare($date, $part = null, $locale = null)
比较 |
对于列表在 Zend_Date API 概述的日期部件,下列基本操作没有相应的方便方法。
方法 | 解释 |
---|---|
equals() |
equals($date, $part = null, $locale = null)
如果有 |
isEarlier() |
isEarlier($date, $part = null, $locale = null)
如果对象的日期的 |
isLater() |
isLater($date, $part = null, $locale = null)
如果对象的日期的 |
isToday() |
isToday() 测试是否今天的年、月、日匹配这个对象的日期值,使用对象的时区。 |
isTomorrow() |
isTomorrow() 测试是否明天的年、月、日匹配这个对象的日期值,使用对象的时区。 |
isYesterday() |
isYesterday() 测试是否昨天的年、月、日匹配这个对象的日期值,使用对象的时区。 |
isLeapYear() |
isLeapYear()
使用 |
isDate() |
isDate($date, $format = null, $locale = null) 这个方法检查给定的日期是否一个真实的日期并且如果所有检查通过返回 true。 它和 php 的 checkdate() 函数一样但也检查本地化月名和扩展了 checkdate() 范围的日期。 |
有若干方法支持获取和 Zend_Date
实例相关的值。
方法 | 解释 |
---|---|
toString() |
toString($format = null, $locale = null)
直接调用或通过魔术方法 |
toArray() |
toArray() 根据对象的地方的约定返回选择的日期的表示的数组。返回数组和 PHP 的 » getdate() 函数相同并包括:
|
toValue() |
toValue($part = null)
根据对象的地方的约定返回一个整数的选择的日期 |
get() |
get($part = null, $locale = null)
这个方法返回对象根据 |
now() |
now($locale = null)
这个方便函数和 |
Several methods support retrieving values related to a Zend_Date
instance.
方法 | 解释 |
---|---|
getFractionalPrecision() |
返回秒的精度 |
setFractionalPrecision() |
设置秒的精度 |
有三个方法提供访问关于太阳的地理本地化信息,包括日出和日落的时间。
方法 | 解释 |
---|---|
getSunrise($location) |
返回日期的日出时间 |
getSunset($location) |
返回日期的日落时间 |
getSunInfo($location) |
返回带有日期的太阳日期的数组 |
基本方法 |