0

0

如何在 PHP 中基于当前时间智能筛选并显示最近的广播节目安排

碧海醫心

碧海醫心

发布时间:2025-12-31 19:52:32

|

481人浏览过

|

来源于php中文网

原创

如何在 PHP 中基于当前时间智能筛选并显示最近的广播节目安排

本文介绍如何结合 php 时间函数与 mysql 查询,动态获取“今天或之后最近一场未开始的广播节目”,解决因仅按日期排序导致的时间逻辑错误问题。核心在于用 `timestamp(current_date(), start)` 构造当日完整时间,并通过 `abs()` 计算与当前时刻的最小时间差,实现精准排序。

在构建电台类网站时,主页常需实时展示“正在播出”和“即将播出”的节目。但原始数据表(如 puzzle)仅存储了星期几(DAY: 0–6)和每日时段(START: '20:00', END: '21:00'),缺乏完整日期字段,直接用 NOW() 比较会失效。因此,不能依赖 START > CURTIME() 这类简单判断——它无法跨日跳转(例如:周二 23:50 之后应匹配周三 00:00 的节目,而非忽略)。

正确思路是:优先匹配从今天起(含)未来 7 天内、尚未开始且时间最接近当前时刻的节目。这需要两层排序逻辑:

  1. 主序:按 DAY 升序(确保先找今天,再明天,依此类推);
  2. 次序:对每个候选 DAY,计算其 START 时间在当天的具体时间戳(如 TIMESTAMP('2024-06-10', '19:00'))与当前完整时间(Y-m-d H:i)的绝对差值,取最小者。

以下是推荐的完整实现方案:

= ? AND `STATUS` = 0 
        ORDER BY `DAY` ASC, 
                 ABS(TIMESTAMP(CURRENT_DATE(), `START`) - ?) ASC 
        LIMIT 1";

// 示例:使用 PDO 预处理执行(更安全)
try {
    $pdo = new PDO($dsn, $user, $pass);
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$currentDay, $currentDateTime]);
    $nextShow = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($nextShow) {
        $dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
        $showDay = $dayNames[$nextShow['DAY']];
        echo "Next show: {$nextShow['USERNAME']} on {$showDay} from {$nextShow['START']} to {$nextShow['END']}";
    } else {
        echo "No upcoming shows found.";
    }
} catch (PDOException $e) {
    error_log("Query failed: " . $e->getMessage());
}
?>

⚠️ 关键注意事项

Musico
Musico

Musico 是一个AI驱动的软件引擎,可以生成音乐。 它可以对手势、动作、代码或其他声音做出反应。

下载

立即学习PHP免费学习笔记(深入)”;

  • 安全性:原始答案中直接拼接 $currentDay 存在 SQL 注入隐患。务必改用预处理语句(如上例),禁止字符串拼接用户/时间相关变量。
  • TIMESTAMP(CURRENT_DATE(), START) 的作用:将 START 字符串(如 '19:00')与今日日期组合成完整 datetime(如 '2024-06-10 19:00:00'),使其可与 $currentDateTime(含日期)做数值比较。
  • 为何用 ABS(...)? 因为 CURRENT_DATE() 是动态的,当 DAY > $currentDay(如今天是周一,查周三节目),TIMESTAMP(CURRENT_DATE(), START) 生成的是“今天的时间”,而非“周三的时间”。但 ABS() 确保:只要 DAY 相同,差值最小者胜出;若 DAY 更大,则该记录天然排在后面(因主序 DAY ASC),此时 ABS() 仅在同一 DAY 组内有效排序,逻辑依然成立。
  • 扩展建议:若需支持“当前正在播出”的节目,可额外加一查询,条件为 DAY = $currentDay AND START = CURTIME(),并优先返回。

此方案兼顾准确性、可读性与安全性,是处理周期性时间调度场景的经典实践。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

1965

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1291

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1197

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1400

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1229

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1439

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1303

2023.11.13

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.5万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 778人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号