Zend_Date::isDate не будет применять формат $
У меня возникла проблема, когда 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";
Это всегда верно, даже если в формате указан знак "а", указывающий, что ему нужно "локализованное время суток" (в моем случае это "AM"/"PM"). Даже полностью неверно отформатированное время, например "12:12:34:56:56", все равно вернет true. Время ':34:56' вернет ложь однако. Это ошибка, или я что-то упустил, думая, что формат, который я даю, - это то, что нужно сопоставить?
Спасибо!
1 ответ
Я не думаю, что 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 вы должны получить ожидаемые результаты.