2012-02-01 56 views
0

在我當前的數據庫中,我使用日期格式yyyy-mm-dd
如果我想按DOB搜索,則必須使用格式yyyy-mm-dd將其與默認日期格式相匹配。不同格式的php搜索日期

有沒有辦法從任何用戶輸入其dd-mm-yyyy或dd/mm/yyyy或yyyy-mm-dd搜索DOB,並給出結果?

$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 2012-02-01 12:44:25

回答

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

是的,你應該在PHP它傳遞給你的SQL查詢之前正常化的結果。

您的代碼可能是這個樣子......

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

...假設strtotime()正確處理這些變化。

另一方面,您應該真正將用戶輸入分解爲單獨的日,月和年輸入,然後自己生成字符串。

1

您可以使用strtotime將任何(合理格式化)的日期解析爲時間戳,並從那裏轉換爲任何其他格式。

例如:

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

它雖然相當處理器重功能,strtotime,所以千萬要節約!在strtotime()

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

檢查http://php.net/manual/en/function.strtotime.php更多信息將使它更容易爲一個日期範圍內檢查:

+0

如果分隔符是斜線(/),則假定爲美式m/d/y。 – Sjoerd 2012-02-01 12:33:48

2

您可以匹配UNIX時間戳如。