【问题标题】:Date range time query日期范围时间查询
【发布时间】:2013-07-02 17:07:50
【问题描述】:

我正在尝试使用开始和结束日期范围查询 MySQL。目前我的变量是:

$begin = $_POST['begin'];
$begin = date('Y/m/d H:i:s', strtotime($begin));
$end = $_POST['end'];
$end = date('Y/m/d H:i:s',strtotime($end));

strtotime($begin) 产生一个可论证的时间戳“00:00:00”。但是我希望strtotime($end) 输出'11:59:59',以便用户可以使用我表单中的日期范围查询特定的日期。请记住我希望使用表单中的$end 日期变量,有人可以演示如何将时间设置为“23:59:59”吗?

我的 PHP 查询是:

"SELECT OrderId, Qty, Del, Timestamp FROM Orders WHERE Timestamp 在 '$begin' 和 '$end' 之间";

非常感谢。

【问题讨论】:

  • 你真的是指11:59:59,而不是23:59:59
  • 为什么是 11:59:59 而不是 23:59:59?为 $_POST['begin'] 和 $_POST['end'] 提供了哪些数据?你能展示数据库查询的样本和你要查询的数据类型吗?我问这些问题是因为您可能不需要创建一些人为的结束日期,您只需要适当地查询数据库。
  • 抱歉,我的意思是 23:59:59。 $_POST['begin'] 和 $_POST['end'] 是完整的日期(即 02/07/2013)。但是,我正在查询时间戳。
  • @Mike Brant 感谢您的帮助。我已经更新了我原来的问题。使用$end = date('Y/m/d H:i:s', strtotime($end) + 86400 - 1); 是一个好的解决方案吗?它有效,但有没有更简单的方法解决这个问题。

标签: php mysql


【解决方案1】:

strtotime 只是产生一个整数时间戳,所以你可以这样做

$end = date('Y/m/d H:i:s', strtotime($end) + 86400 - 1);

添加一天以获得“明天”,然后删除一秒以获得您开始那天的午夜之前的时刻。

或者更简单:

$end = date('Y/m/d', strtotime($end)) . ' 11:59:59';

生成适当的日期,然后自己手动添加时间部分。

【讨论】:

    【解决方案2】:

    如果您想对时间进行硬编码,只需将其连接起来:

    $end = date('Y/m/d', strtotime($end)) . ' 11:59:59';
    

    【讨论】:

      【解决方案3】:

      strtotime 返回一个时间戳。您可以添加 86399(1 天 - 1 秒)

      或者你可以使用 strtotime + 语法所以strtotime($end . "+ 23 hours")

      或者如果变量中没有时间信息,您可以自己添加strtotime($end . "+ 23:59")

      你的另一个选择是转换为一个日期时间对象,它提供了更多的灵活性

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-26
        • 2021-11-15
        • 2013-10-22
        • 2014-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多