2013-05-27 57 views
4

我使用zend框架1.12.0,並且我有一個從數據庫獲取的值將被驗證。 也就是說,如果它的日期值,那麼我必須要改變的格式爲YYYY-MM-DD以MM/DD/YYYY.Else我把值'。我現在用的是下面的代碼在zend框架中檢查有效日期

$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:它沒有轉換格式。所以如果使用zend的YYYY-MM-DD或YYYY-MM-DD H:i:s格式,如何檢查一個值是有效的日期。

回答

4

問題是Zend_Validate_Date沒有正確處理時間戳。一種選擇是通過傳遞datestrtotime以減少任何時間來正常化$值。

$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; 
    } 
} 

又見 this part of the ZF docsthis stack overflow question

1

試試這個:

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:的」 格式。只有在日期有效的情況下,您才能以格式$ wanted_format得到有效的日期結果。

+0

我無法將格式硬編碼爲'YYYY-mm-dd',因爲有時值會以日期格式顯示,有時會以日期時間格式顯示。所以我無法預定格式並設置它。但感謝幫助@ NicoDeug。 –