PHP / Zend пользовательские форматы ввода даты - PullRequest
0 голосов
/ 24 мая 2010

Я создаю библиотечный компонент для других разработчиков в моей команде, используя PHP и Zend. Этот компонент должен иметь возможность принимать в качестве входных данных дату (строку) и другую строку, сообщающую ему формат этой даты. Просматривая документацию и примеры Zend, я подумал, что нашел решение -

$dateObject = Zend_Date('13.04.2006', array('date_format' => 'dd.MM.yyyy'));

однако в этой строке выдается ошибка - вызов неопределенной функции.

Так что вместо этого я попробовал это -

$dt = Zend_Locale_Format::getDate('13.04.2006', array('date_format' => 'dd.MM.yyyy'));

Это выполняет работу, но выдает ошибку, если введенная дата недействительна. Документы выглядят так, как будто вы можете использовать функцию isDate () для проверки действительности -

Zend_Date::isDate('13.04.2006', array('date_format' => 'dd.MM.yyyy'))

но эта строка всегда возвращает false.

Так что мои вопросы -

Правильно ли я поступаю? Если нет, то есть ли лучший способ справиться с этим через Zend или прямой PHP?

Если я использую Zend_Locale_Format :: getDate (), нужно ли мне беспокоиться о локали, установленной в другом месте, и об изменении результатов вызова?

Я заблокирован в PHP 5.2.6 для Windows, кстати ... так что функции 5.3+ и strptime () отсутствуют.

Ответы [ 3 ]

1 голос
/ 24 мая 2010

Взгляните на этот пост. Может быть, это поможет.

0 голосов
/ 24 сентября 2010

$ dateObject = Zend_Date ('13 .04.2006 ', массив (' date_format '=>' dd.MM.yyyy '));

выдает ошибку "undefined function"потому что это не функция.в соответствии с руководством Zend_Date является объектом с конструктором, а строка формата не указывается в массиве.вы должны написать это так

$ dateObject = new Zend_Date ('13 .04.2006 ',' dd.MM.yyyy ');

и все круто.

чао ульф

0 голосов
/ 24 мая 2010

Возможно, вы захотите попробовать использовать константы Zend_Date вместо строк.Причина, по которой я это говорю, заключается в том, что в документах есть некоторые несоответствия:

MM     Month, two digit                   Zend_Date::MONTH       02
MMMM   Month, localized, complete         Zend_Date::MONTH_NAME  February

, а затем:

Итак, если вы используете 'dd.MM.yyyy'Вы получите' 31. Декабрь .2007 ', но если вы используете' dd.MM.YYYY ', вы получите' 31 .De.12.2008 '

Показывает MM, показывающийстрока?Таким образом, ваша дата не будет подтверждена, учитывая этот формат.Вы пробовали isDate без формата?

Я справился с этой проблемой, выполнив следующее:

try
{
    $myDate = new Zend_Date($date, $format, $locale);
}
catch (Zend_Date_Exception $e)
{
    $myDate = new Zend_Date::now();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...