2016-03-05 115 views
-2

我想在我的代碼中驗證像17-JAN-1985那樣的日期。PHP將日期轉換爲DD-M-YY

下面是函數我使用:

function fncDate($date){ 
    $d = DateTime::createFromFormat('DD-M-YY', $date); 
    $result = $d && $d->format('DD-M-YY') == $date; 
    if(!$result){ 
     return "Date should be in the following format: DD-MMM-YYYY"; 
    } 
} 

這總是返回FALSE:fncDate("17-JAN-1985");

難道我做錯了什麼?

感謝

回答

2

看起來像你的格式字符串讀取(解析)的日期應爲'd-M-Y',而不是 'DD-M-YY'。當你比較時,你需要大寫雙方,因爲PHP會生成「Jan」而不是「JAN」。此外,你忘了返回值。

這是完全正常的代碼:

function fncDate($date){ 
    $d = DateTime::createFromFormat('d-M-Y', $date); 
    $result = $d && strtoupper($d->format('d-M-Y')) == strtoupper($date); 
    if(!$result){ 
     return "Date should be in the following format: DD-MMM-YYYY";. 
    } 
    return $result; 
} 
+0

我測試了它,它是不會與我已經更新了我的答案格式爲 「d-M-Y」 –

+0

工作。您可能需要使用不同的格式進行分析,並使用不同的格式重新生成日期,但我不確定這一點,但因爲我沒有使用這些奇怪的結構。此外,您的生成日期可能具有「Jan」而不是「JAN」,因此您可能需要全部大寫以匹配它。 –

+0

是的你是對的謝謝我也注意到了它 –

0

試試這個:

function fncDate($date) 
{ 
    $date = date_create($date); 

    $date1= date_format($date, 'Y-m-d '); 

    $result = $date1 && $date1 == $date; 

    if(!$result) 
    { 
     echo "Date should be in the following format: DD-MMM-YYYY"; 
    } 
    else 
    { 
     echo "Ok"; 
    } 
}