2012-05-03 72 views
3

我想驗證應該保存爲日期的字符串。我希望用戶在此format ('d-m-Y)的表單中提供日期。 我使用這個功能來檢查是否有有效日期給定:PHP不允許字符串日期格式爲d/m/Y

function isDateValid($birthdate) 
{ 
    $date = date('Y-m-d', $birthdate);   

    $stamp = strtotime(str_replace('/', '-', $date), $date); 

    if (!is_numeric($stamp)) 
    return FALSE; 

    //checkdate(month, day, year) 
    if (checkdate(date('n', $stamp), date('d', $stamp), date('Y', $stamp))) 
    { 
    return TRUE; 
    } 
    return FALSE; 
} 

也能正常工作以這種形式d-M-Y的每個條目。但是當這樣的格式被賦予d/m/Y時,它仍然返回true,但日期在數據庫中保存爲m/d/Y。

我該怎麼做才能確保這種格式的'd/m/y'條目不可能保存在數據庫中。

在此先感謝

找到了解決辦法

好吧,我想我找到了解決辦法

if(!preg_match('/^(\d\d?)-(\d\d?)-(\d\d\d\d)$/', $birthdate, $matches)) 
{ 
    return false; 
} 
return checkdate($matches[2], $matches[1], $matches[3]); 

我檢查,如果正確的模式給予,在那之後我檢查它是否一個有效的日期。 這對我很好,所以,謝謝!

+2

永遠不要讓用戶插入日期作爲文本,病程他們可能會插入你永遠無法想到的字符串。使用日期選擇器 – k102

+1

如果月份和日期值都<= 12,則根本無法確定它們是否處於正確的順序。它們都代表有效日期。 – DaveRandom

+0

不要在數據庫中使用字符串來存儲日期,使用適當的日期格式,那麼它與輸入日期的格式無關。或者,只要檢查有效年份是否小於100,如果是,那麼它是y格式而不是Y格式 – Anigel

回答

0

你可以使用正則表達式模式,如:*\d{4}-\d{2}-\d{2}*檢查格式