Проверка действительной даты в zend framework

Я использую zend framework 1.12.0, и у меня есть выборка из базы данных для проверки. То есть, если это значение даты, то я должен изменить формат в ГГГГ-ММ-ДД на MM/DD/YYYY.Else, я сохраняю значение как ''. Я использую следующий код

$validator = new Zend_Validate_Date();
 if(trim($value)=='0000-00-00' || $validator->isValid(trim($value))){
 if($validator->isValid(trim($value))){
 $utilObj = new Utilityclass();
 $arrayReturn[$key] = $utilObj->getDateMdy($value,"/");
 }
 else{
 $arrayReturn[$key] = '';
 }
 }

Моя проблема заключается в том, что значение даты может быть в формате YYYY-MM-DD или YYYY-MM-DD H: i: s. Поэтому, когда его YYYY-MM-DD я получаю правильный вывод. Если его YYYY- MM-DD H: i: s не преобразовывать формат. Так как проверить значение, это допустимая дата, если его в формате YYYY-MM-DD или YYYY-MM-DD H: i: s с использованием zend.

2 ответа

Проблема заключается в том, что Zend_Validate_Date неправильно обрабатывает временные метки. Одним из вариантов было бы нормализовать значение $, передав его через date и strtotime, чтобы обрезать в любое время.

$value = date("Y-m-d", strtotime($value));

это сделает дату всегда

YYYY-MM-DD

Другим было бы создание собственной проверки достоверности

единственным требованием является реализация метода isValid и getMessages для выполнения интерфейса, из которого Zend_Validate_Date имеет исправную реализацию. Это устранит ограничения на формат входных дат, но я думаю, что это своего рода цель. Если вы только хотели разрешить пару различных форматов, которые можно было легко реализовать и в этом.

class My_Validate_Datetime extends Zend_Validate_Date{
 public function isValid($value){
 // if strtotime can't understand a date it returns 0 which is falsey
 if (strtotime($value)){
 return true;
 }
 $this->_error(Zend_Validate_Date::INVALID_DATE);
 return false; 
 }
}

См. также эта часть документов ZF или этот вопрос


Попробуйте следующее:

function dateFormat($date, $wanted_format){
 //Zend date
 $zend_date = new Zend_Date();
 $zend_date->set($date, "YYYY-mm-dd");
 //validator
 $validation_date = new Zend_Validate_Date();
 if($validation_date->isValid($zend_date->get('YYYY-mm-dd'))){
 return $zend_date->get($wanted_format);
 }else {
 return "";
 }
}

Он по-прежнему будет иметь дело с форматом "YYYY-MM-DD H: i: s". Вы получите корректный результат в формате $wanted_format, только если дата действительна.

licensed under cc by-sa 3.0 with attribution.