2017-10-06 12 views
-1

2つの異なる形式の日付文字列が有効な日付であるかどうかを確認する必要があります。形式は、YYYY-MM-DDYYYY.MM.DDです。私はそうのように、ただ一つだけ、日付文字列フォーマットの検証が見つかりました:2つの異なる形式の日付文字列が有効な日付であるかどうかをチェックする方法は?

function validateDate($date) 
{ 
    $d = DateTime::createFromFormat('Y-m-d', $date); 
    return $d && $d->format('Y-m-d') == $date; 
} 

機能はこのanswerまたはphp.net

からコピーされたが、どのように2つの日付書式の検証についてはどうですか?どのようにそれを解決するには?任意のヘルプ

+3

からコピーされたのですか? – Manav

+0

最初に解いたのと同じです – ArtOsi

答えて

1

ためのおかげで、両方のために次のことを試してみてください。

$date="2017-09-11"; 

if (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/",$date)) { 
    echo true; 
} else { 
    echo false; 
} 

$date="2017.10.22"; 

if (preg_match("/^[0-9]{4}.(0[1-9]|1[0-2]).(0[1-9]|[1-2][0-9]|3[0-1])$/",$date)) { 
    echo true; 
} else { 
    echo false; 
} 

形式が有効であるかどうかをチェックするために正規表現を使用しています。

OR

$date="2017-09-11"; 
$dt = DateTime::createFromFormat("Y-m-d", $date); 
echo $dt !== false && !array_sum($dt->getLastErrors()); 


$date="2017.10.22"; 

$dt = DateTime::createFromFormat("Y.m.d", $date); 
echo $dt !== false && !array_sum($dt->getLastErrors()); 

それは両方のフォーマットに対して日付を確認するためにDateTimeを使用しています。

編集:両方がまともなソリューションですが、benchmarksは、この場合には、preg_matchDateTimeよりもかなり高速であることを示しています。 https://3v4l.org/H8C73

+1

なぜ、 'DateTime()'メソッドの代わりに正規表現を使いたいのですか? – Manav

+0

@Manavコメントをいただきありがとうございます。私は 'DateTime'メソッドも追加しました。 – mega6382

0

フォーマットを第2パラメータとして指定したoriginal functionをコピーして、関数を2回実行します。コメントですでに述べたように。

function validateDate($date, $format = 'Y-m-d H:i:s') 
{ 
    $d = DateTime::createFromFormat($format, $date); 
    return $d && $d->format($format) == $date; 
} 

$isValid = validDate($date, 'Y-m-d') || validDate($date, 'Y.m.d'); 

機能は、あなたがパラメータとしてフォーマットを渡し、関数を2回実行し、このanswerまたはphp.net

関連する問題