不同格式的php搜索日期
在我当前的数据库中,我使用日期格式yyyy-mm-dd。不同格式的php搜索日期,php,mysql,database,date,dob,Php,Mysql,Database,Date,Dob,在我当前的数据库中,我使用日期格式yyyy-mm-dd。 如果我想按DOB搜索,则必须使用格式yyyy mm dd将其与默认日期格式匹配 有没有一种方法可以从用户输入的数据中搜索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 '$keywo
如果我想按DOB搜索,则必须使用格式yyyy mm dd将其与默认日期格式匹配 有没有一种方法可以从用户输入的数据中搜索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
}
不容易。首先将用户输入转换为正确的格式,然后再将其传递给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;
}
$yyyy_mm_dd = date('Y-m-d', strtotime('02/01/2012'));
不容易。首先将用户输入转换为正确的格式,然后再将其传递给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;
}
$yyyy_mm_dd = date('Y-m-d', strtotime('02/01/2012'));
是的,在将结果传递给SQL查询之前,应该在PHP中对其进行规范化 您的代码可能如下所示
$dateForSqlQuery = date('Y-m-d', strtotime($input));
…假设strotime()
将正确处理这些变化
另一方面,您应该将用户输入分解为单独的日、月和年输入,然后自己生成字符串 是的,在将结果传递给SQL查询之前,应该在PHP中对结果进行规范化 您的代码可能如下所示
$dateForSqlQuery = date('Y-m-d', strtotime($input));
…假设strotime()
将正确处理这些变化
另一方面,您应该将用户输入分解为单独的日、月和年输入,然后自己生成字符串 您可以使用将几乎任何(合理格式的)日期解析为时间戳,并从中转换为任何其他格式
例如:
if (preg_match('~([0-9]{2})[-/]([0-9]{2})[-/]([0-9]{4})~', $input, $matches)) {
return $matches[3].'-'.$matches[2].'-'.$matches[1];
} else {
return $input;
}
$yyyy_mm_dd = date('Y-m-d', strtotime('02/01/2012'));
不过,这是一个相当繁重的处理器功能,strotime
,所以一定要节约 您可以使用将几乎任何(合理格式的)日期解析为时间戳,并从中转换为任何其他格式
例如:
if (preg_match('~([0-9]{2})[-/]([0-9]{2})[-/]([0-9]{4})~', $input, $matches)) {
return $matches[3].'-'.$matches[2].'-'.$matches[1];
} else {
return $input;
}
$yyyy_mm_dd = date('Y-m-d', strtotime('02/01/2012'));
不过,这是一个相当繁重的处理器功能,
strotime
,所以一定要节约 您可以匹配UNIX时间戳,例如:
$timestamp = strtotime($date)
SELECT * WHERE UNIX_TIMESTAMP(dob) = '$timestamp'
查看有关strotime()
这将更容易在日期范围内进行检查。您可以匹配UNIX时间戳,例如:
$timestamp = strtotime($date)
SELECT * WHERE UNIX_TIMESTAMP(dob) = '$timestamp'
查看有关strotime()
这将便于在日期范围内进行检查。如果分隔符为斜杠(/),则假定为美制m/d/y。如果分隔符为斜杠(/),则假定为美制m/d/y。将该列转换为日期列将该列转换为日期列