【问题标题】:Can't implement filtering function (strtotime)无法实现过滤功能(strtotime)
【发布时间】:2018-12-15 02:06:09
【问题描述】:

需要建议我需要以哪种方式解决过滤问题。

我有体育赛事的记录,每个体育赛事都有赛事开始时间和赛事结束时间的列:

事件 #1
开始时间:09:00 (time_from)
结束时间:12:00 (time_to)

数据库中时间的格式为 HH:MM。

然后我有过滤页面,用户可以在其中设置事件时间的时间范围,以显示 09:45 - 11:45 发生的所有事件)

我试图通过将过滤器输入和数据库值转换为秒来过滤用户指定范围内的事件,但它没有完全工作:

$i = 0;
foreach($sport_events as $event)
{
    // check if the event is in user specified range
    // $filter_time is already converted to strtotime previously

    if( strtotime($event['time_from']) >= $filter_time_from_seconds && strtotime($event['time_to']) <= $filter_time_to_seconds )
    {
        // do nothing
    } else {
        // unset sport event
        unset($event[$i]);
    }
    $i++;
}

如果用户输入 09:00 和 12:00,它可能会输出结果,但不是在范围内的例如 10:00 和 11:00。

有什么想法吗?

【问题讨论】:

  • 你能输出这些变量的值吗?
  • 如果我们按照我们的例子,那么 $filter_time_from_seconds 和 $filter_time_to_seconds 是 10:00:00 1530860400, 11:00:00 1530864000
  • 抱歉耽搁了... $event['time_from'] 值是 9:00 ?还是我弄错了?
  • 09:00 不是 9:00 是正确的
  • 因此,如果事件时间是 9:00,过滤时间是 9:45,那么您将找不到匹配项。

标签: php datetime time filter filtering


【解决方案1】:

如果您将 'from_date' 和 'to_date' 以 TIME 格式存储到数据库中,那么您可以直接将用户的输入过滤器数据传递到 MySQL 查询中,例如

SELECT * FROM TABLE-NAME WHERE `from_date` >= '10:00' AND `to_date` <= '12:00';

您不需要循环来检查 PHP 条件中的结果集。

【讨论】:

    猜你喜欢
    • 2019-09-05
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 2020-03-10
    • 2022-10-14
    • 1970-01-01
    相关资源
    最近更新 更多