不同格式的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
}
答
不容易。首先将用户输入转换为正确的格式,然后将其传递给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时间戳如。
将列转为DATE列 – Gordon 2012-02-01 12:44:25