【问题标题】:php search date with different format不同格式的php搜索日期
【发布时间】:2012-02-24 03:11:04
【问题描述】:

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

【问题讨论】:

  • 将该列转换为 DATE 列

标签: php mysql database date


【解决方案1】:

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

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

查看http://php.net/manual/en/function.strtotime.php 了解有关strtotime() 的更多信息

这将更容易在日期范围内进行检查。

【讨论】:

    【解决方案2】:

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

    例如:

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

    不过,这是一个相当繁重的处理器功能,strtotime,所以要节省!

    【讨论】:

    • 如果分隔符是斜线 (/),则假定为美式 m/d/y。
    【解决方案3】:

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

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

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-07
        • 1970-01-01
        相关资源
        最近更新 更多