【问题标题】:How to create a date range query using Mysql timestamp?如何使用 Mysql 时间戳创建日期范围查询?
【发布时间】:2014-02-11 21:06:36
【问题描述】:

这里只需要一点帮助,希望您能帮我解决我的简单问题。

我有一个包含商店数据的表。在我的 PHP 页面中,用户可以注册他们的商店。 并且在注册时,用户注册他/她帐户的日期将保存在数据库表中,并将格式化为 TIMESTAMP

我对此没有意见。在我的后端页面中有一个高级搜索方法的表格。在我的表单中,有一个 下拉字段,旁边有一个 datepicker,格式为 mm/dd/yyyy 所以我有一个2 个日期选择器,用于 fromto

我的问题是:

我使用 PHP 中的 strtotime() 函数格式化了 datepicker 结果。我有一个这样的查询。

$query = "SELECT * FROM shops
          WHERE status = '".$status."'
          AND registered BETWEEN ('".$from." AND ".$to."')";

查询的示例输出是:

 SELECT * FROM shops WHERE status = 'P' AND registered BETWEEN ('1388505600' AND '1391097600');

现在我有了 $from 和 $to 的时间戳结果。如何在mysql中过滤?

好的,就是这样。提前致谢。

【问题讨论】:

    标签: php mysql sql timestamp


    【解决方案1】:

    您实际上应该在 PHP 中格式化正确的 YYYY-MM-DD 字符串格式。

    基本上很少有理由在 MySQL 中使用 UNIX 时间戳。

    因此,对每个日期选择器到/从值执行类似的操作:

    $to_datetime = DateTime::createFromFormat('m/d/Y|', $datepicker_to);
    $to = $to_datetime->format('Y-m-d');
    $from_datetime = DateTime::createFromFormat('m/d/Y|', $datepicker_from);
    $from = $from_datetime->format('Y-m-d');
    

    然后在您的查询中使用它们:

    $query = "SELECT * FROM shops
              WHERE status = '".$status."'
              AND registered BETWEEN ('".$from."' AND '".$to."')";
    

    请注意,我使用了 PHP DateTime 类,我强烈推荐它作为您在 PHP 中进行日期操作的首选工具(以及它的相关类,如 DateIntervalDatePeriodDateTimeZone 等。 )

    【讨论】:

    • 感谢 Mike 先生提供了非常丰富的答案。我现在将尝试并研究此代码以供参考。谢谢。
    • 先生,我收到错误Fatal error: Call to a member function format() on a non-object in
    • @Jerielle 似乎 DateTime 对象的创建不起作用(尽管应该抛出异常)。你能告诉我你为$datepicker_to$datepicker_from 传递了什么值(无论你有错误)?有错别字吗?
    • 好的,我将变量$convert_from$convert_to 传递给了DateTime::createFromFormat
    • 那么它们有什么价值呢?另请注意,我在上面稍微更改了代码,将 DateTime 对象的时间部分设置为 00:00:00,尽管这应该会影响您的错误。
    【解决方案2】:

    我认为你需要使用FROM_UNIXTIME

    $query = "SELECT * FROM shops WHERE status = '".$status."' AND registered BETWEEN FROM_UNIXTIME(".$from.") AND FROM_UNIXTIME(".$to.")";
    

    【讨论】:

    • 好的,我试试。谢谢。
    【解决方案3】:

    如果registered 列不是 UNIX 时间,则需要删除时间戳周围的引号,并且需要使用 FROM_UNIXTIME()。

    【讨论】:

    • 这完全没有帮助,因为仍然需要在 unix 时间戳和 MySQL 日期时间格式之间进行转换。
    • 是的,我没有意识到这一点。
    【解决方案4】:

    PHP

    // $t is the value you got from strtotime()
    $FormattedDateTime = date('Y-m-d H:i:s', $t)
    

    【讨论】:

    • 您实际上需要Y-m-d H:i:s 才能与 MySQL 兼容。
    猜你喜欢
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 2011-04-27
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    相关资源
    最近更新 更多