2010-03-15 68 views
1

些什麼呢regex表達,將進入preg_split函數來驗證日期的日期驗證在PHP

7-Mar-10格式或者我如何在PHP

感謝驗證格式7-Mar-10的日期。

回答

9

strtotime

這裏有一個如何使用它

function isValidTime($str) { 
    return strtotime($str) !== false; 
} 
+0

不,我正在尋找驗證邏輯,讓我們假設如果我將擁有Hello World而不是數據而不是數據,那麼strtotime會給予什麼? – Rachel 2010-03-15 19:34:14

+0

@Rachel:它會返回'false',你可以斷言:'if(strtotime($ date)=== false)//它不是一個有效的日期' – zneak 2010-03-15 19:35:22

+0

@Rachel:*「返回成功的時間戳,FALSE除此以外。 「* – Joey 2010-03-15 19:35:23

-3

我會讓它先用爆炸爲例,

$parts=explode("-",$date); 
與陣列

然後

$months=array("Jan"=>1,"Feb"=>2...) 

然後用checkdate ($ months [$ parts 1],$ parts [0],$ parts [2]);

+0

這是比必要的更冗長的方式。 – 2010-03-15 19:56:26

0

DateTime類的createFromFormat方法(也可在function窗體中)允許我們根據給定的格式解析日期字符串。如果你想知道什麼地方出了問題,那麼這個班還有跟蹤你的錯誤的好處。

這裏有一個快速耶/否驗證功能:

function valid($date, $format = 'j-M-y') { 
    $datetime = DateTime::createFromFormat($format, $date, new DateTimeZone('UTC')); 
    $errors = DateTime::getLastErrors(); 
    return ($errors['warning_count'] + $errors['error_count'] === 0); 
} 

var_dump(valid('7-Mar-10')); // bool(true) 
var_dump(valid('7-3-10')); // bool(false) 

當然,以上只是用於驗證日期(和僅作爲PHP 5.3)的單一格式,所以如果你只是想接受任何日期(甚至錯誤的日期自動轉換爲正確的值),或者出於任何原因目前還不能使用PHP 5.3,那麼在其他答案中提到的strtotime會有幫助。