Zend Date Weirdness - Отсутствует конфигурация? - PullRequest
0 голосов
/ 24 июня 2010

Я получаю странный вывод из функции 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 ]

1 голос
/ 10 марта 2011

Метод 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, посмотрите в другом месте.

0 голосов
/ 24 июня 2010
0 голосов
/ 25 июня 2010

Это не совсем ответ на мой вопрос, но это мой обходной путь.Я расширил класс 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();
    }
}
0 голосов
/ 24 июня 2010

Хум, попробуйте это:

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