Zend_Date :: isDate не будет применять формат $ - PullRequest
1 голос
/ 08 декабря 2010

У меня проблема с тем, что Zend_Date :: isDate возвращает true, даже если значение не обязательно соответствует указанному формату.

Например:

$time = "12:34:56"; // Time doesn't have AM/PM attached

if( Zend_Date::isDate($time, 'hh:mm:ss a') )
    echo "this is true";
else
    echo "this is false";

Этовсегда true, даже если в формате указан символ «a», указывающий, что ему нужно «локализованное время суток» (в моем случае это «AM» / «PM»).Даже полностью неверно отформатированное время, например «12: 12: 34: 56: 56», все равно вернет true.Время ': 34: 56' вернет ложь однако.Это ошибка или я что-то упустил, думая, что формат, который я даю, это то, что нужно сопоставить?

Спасибо!

1 Ответ

3 голосов
/ 08 декабря 2010

Я не думаю, что Zend_Date создан для «принудительного применения» формата.Он создан для того, чтобы отвечать: «Если я дам Zend_Date эту строку, можешь ли ты засунуть ее в этот формат?»Это действительно вводит в заблуждение.

В вашем примере это правда, но на самом деле оно оценивается как:

Jan 25, 35 12:00:00 AM

Что вы, вероятно, не ожидали.

В вашем поддельном примере, это также верно, это оценивает:

Dec 14, 34 8:56:00 AM (Dec 12, 34 + 56 hours and 56 minutes)

Для проверки даты, которую, я думаю, вы хотите сделать, это использовать Zend_Validator ...

    $validator = new Zend_Validate_Date(array('format' => 'hh:mm:ss a'));
    var_dump($validator->isValid("12:34:56 pm")); // true
    var_dump($validator->isValid("14:34:56 pm")); // false, actually 2pm
    var_dump($validator->isValid("01:11:11 am")); // true
    var_dump($validator->isValid("01:11:11 xm")); // true, 24h fallback
    var_dump($validator->isValid("24:01:01")); // false
    var_dump($validator->isValid("16:01:01")); // true, 24h fallback

Если вы сначала проведете даты через валидацию, то в Zend_Date вы получите ожидаемые результаты.

...