不同格式的php搜索日期

问题描述:

在我当前的数据库中,我使用日期格式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

不容易。首先将用户输入转换为正确的格式,然后将其传递给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; 
} 

是的,你应该在PHP它传递给你的SQL查询之前正常化的结果。

您的代码可能是这个样子......

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

...假设strtotime()正确处理这些变化。

另一方面,您应该真正将用户输入分解为单独的日,月和年输入,然后自己生成字符串。

您可以使用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

您可以匹配UNIX时间戳如。