php搜索日期与不同的格式

时间:2012-02-01 12:28:51

标签: php mysql database date dob

在我目前的数据库中,我使用日期格式 yyyy-mm-dd 如果我想通过DOB搜索,则必须使用格式yyyy-mm-dd将其与默认日期格式匹配。

有没有办法从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
}

4 个答案:

答案 0 :(得分: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 :(得分:2)

您可以匹配UNIX时间戳,例如:

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

查看http://php.net/manual/en/function.strtotime.php以获取有关strtotime()

的更多信息

这样可以更方便地在日期范围内进行检查。

答案 2 :(得分:1)

是的,您应该在将结果传递给SQL查询之前对PHP中的结果进行规范化。

您的代码可能看起来像这样......

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

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

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

答案 3 :(得分:1)

您可以使用strtotime将几乎任何(格式合理的)日期解析为时间戳,然后您可以转换为任何其他格式。

例如:

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

虽然这是一个非常重要的处理器功能,strtotime,所以一定要保留!