2012-02-01 7 views
0

私の現在のデータベースでは、私は日付形式を使用していますyyyy-mm-dd
DOBで検索する場合は、yyyy-mm-ddという形式を使用してデフォルトの日付形式と一致させる必要があります。異なるフォーマットのPHP検索日

DOBを検索する方法はありますか?dd-mm-yyyyまたはdd/mm/yyyyまたはyyyy-mm-ddを入力して結果を出しますか?

$keyword = clean($keyword,1); 

$result = $db->query("SELECT name, dob, email FROM user WHERE name LIKE '$keyword%' OR dob LIKE '$keyword%' OR email LIKE '$keyword%'"); 

if($result){ 
    //echoing the result 
} 
+0

DATE列に変換する – Gordon

答えて

2

容易ではありません。まず、ユーザー入力を正しい形式に変換してから、SQLクエリーに渡します。例えば

if (preg_match('~([0-9]{2})[-/]([0-9]{2})[-/]([0-9]{4})~', $input, $matches)) { 
    return $matches[3].'-'.$matches[2].'-'.$matches[1]; 
} else { 
    return $input; 
} 
1

はい、あなたはSQLクエリに渡す前に、PHPで結果を正規化する必要があります。 strtotime()が正しくこれらの変化を処理することを想定し、このようなものに見えるかもしれ

あなたのコード...

$dateForSqlQuery = date('Y-m-d', strtotime($input)); 

...。

一方、ユーザーの入力を別々の日、月、および年の入力に分割して、自分で文字列を生成する必要があります。

1

strtotimeを使用すると、ほとんどの(合理的にフォーマットされた)日付をタイムスタンプに構文解析し、そこから他の形式に変換することができます。例えば

$yyyy_mm_dd = date('Y-m-d', strtotime('02/01/2012')); 

それは、しかしstrtotimeかなりプロセッサ重い機能ですので、温存されます!

+0

区切り記号がスラッシュ(/)の場合は、アメリカのm/d/yとみなされます。 – Sjoerd

2

あなたが例えばUNIXタイムスタンプと一致することができます:

$timestamp = strtotime($date) 
SELECT * WHERE UNIX_TIMESTAMP(dob) = '$timestamp' 

チェックhttp://php.net/manual/en/function.strtotime.phpを詳細はstrtotime()

この日の範囲内でチェックすることが容易になります。

関連する問題