不同格式的php搜索日期

不同格式的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

在我当前的数据库中,我使用日期格式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 '$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。将该列转换为日期列将该列转换为日期列