Zend Date Weirdness - 缺少配置?

时间:2010-06-24 15:11:48

标签: php zend-framework zend-date

我从getDate()函数得到奇数输出。它应该返回一个没有时间部分的日期,但我得到时间部分。我错过了一些可以纠正这个问题的配置选项吗?

示例代码:

date_default_timezone_set('America/New_York');
$date = new Zend_Date(array(
    'year' => 2010,
    'month' => 3,
    'day' => 29,
));
echo $date->getIso() . PHP_EOL;
echo $date->getDate()->getIso() . PHP_EOL;

输出:

2010-03-29T00:00:00-04:00
2010-03-29T23:00:00-04:00

4 个答案:

答案 0 :(得分:1)

Zend Date的getDate方法很容易被误解。除了与另一个getDate输出进行比较之外,它的输出实际上不会被使用,而只是看两个日期与其日历日期的比较。将其视为“日历日期哈希函数”。

示例(好):这两个日期是否属于同一日历日期?

$date1->getDate()->equals($date2->getDate()); // works as expected

示例(不好):

echo $date1->getDate(); // is meaningless
echo $date1->getCalendarDateHash(); // just as this would be
$date1 = $date1->getDate(); // and don't store this meaningless value

如果您正在寻找它将时间部分设置为00:00:00,请查看其他地方。

答案 1 :(得分:0)

哼,试试这个:

echo $date->get(Zend_Date::DATE_FULL);

答案 2 :(得分:0)

答案 3 :(得分:0)

这不是我的问题的答案,但这是我的解决方法。我已将Zend_Date类扩展如下:

class My_Date extends Zend_Date
{
    public static function now($locale = null)
    {
        return new My_Date(time(), self::TIMESTAMP, $locale);
    }

    /**
     * set to the first second of current day
     */
    public function setDayStart()
    {
        return $this->setHour(0)->setMinute(0)->setSecond(0);
    }

    /**
     * get the first second of current day
     */
    public function getDayStart()
    {
        $clone = clone $this;
        return $clone->setDayStart();
    }
}