0

0

PHP 实现电台节目单的智能时间匹配与动态展示

聖光之護

聖光之護

发布时间:2025-12-31 19:24:08

|

120人浏览过

|

来源于php中文网

原创

PHP 实现电台节目单的智能时间匹配与动态展示

本文详解如何在 php 中结合 mysql 查询,根据当前日期与时间精准筛选出“当前正在播出”或“即将开始”的电台节目,支持跨日循环查找(7天内),避免时间错位与逻辑漏洞。

在构建电台类网站时,一个常见且关键的需求是:首页实时显示「当前正在直播的节目」和「下一个即将播出的节目」。然而,由于数据库中仅存储了星期几(DAY 字段,0=Sunday, 1=Monday…)和当日开始/结束时间(START, END),缺乏完整日期信息,直接用 NOW() 比较会失效——MySQL 无法原生理解 “本周三 20:00” 是指今天、明天还是下周。

原始思路(如 $currentDay = date("w"); $currentTime = date("H:i");)仅获取了局部时间片段,若仅靠 PHP 层遍历所有记录做字符串比对,不仅性能低下,还极易因跨日逻辑(例如:周二 23:50 查询,应匹配周三 00:30 的节目)而出错。

✅ 正确解法是:将星期逻辑转化为可排序的时间距离,并交由 MySQL 高效计算。核心策略分三步:

  1. 构造虚拟时间戳:用 CURRENT_DATE() 拼接 START 时间,生成当天的 YYYY-MM-DD HH:MM 时间点(如 2025-04-05 20:00);
  2. 计算时间差绝对值:用 ABS(TIMESTAMP(CURRENT_DATE(), START) - CURRENT_TIMESTAMP) 得到每条记录与当前时刻的“时间距离”;
  3. 双级排序 + 循环兜底:先按 DAY >= 当前星期几 筛选“今日及之后”,再按时间距离升序排列,取第 1 条;若无结果,则自动进入下一日(MySQL 自然通过 DAY 升序实现)。

以下是生产就绪的 PHP + MySQL 实现:

唱鸭
唱鸭

音乐创作全流程的AI自动作曲工具,集 AI 辅助作词、AI 自动作曲、编曲、混音于一体

下载

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

= ? AND `STATUS` = 0 
        ORDER BY `DAY` ASC, time_diff ASC 
        LIMIT 1";

$stmt = $pdo->prepare($sql);
$stmt->execute([$currentDateTime, $currentDay]);
$nextShow = $stmt->fetch(PDO::FETCH_ASSOC);

if ($nextShow) {
    // 将数字 DAY 转为中文/英文星期(示例)
    $weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
    $showDay = $weekdays[$nextShow['DAY']];
    echo "即将播出:{$nextShow['USERNAME']}({$showDay} {$nextShow['START']}–{$nextShow['END']})";
} else {
    echo "暂无近期节目安排。";
}
?>

⚠️ 重要注意事项

  • ❌ 避免拼接字符串构造 SQL(如原答案中的 ".$currentDay."),存在严重 SQL 注入风险;
  • ✅ 务必使用预处理语句(PDO 或 MySQLi)绑定参数;
  • ⏱ TIMESTAMP(CURRENT_DATE(), START) 依赖 START 为 HH:MM 格式(TIME 类型最佳),若存为字符串需确保格式统一(无空格、24小时制);
  • ? 该方案天然支持“7天循环”:当 DAY 最大值(6)后无匹配时,DAY >= $currentDay 仍成立,但 ORDER BY DAY ASC 会让 DAY=0(周日)排在最后;若需严格限制 7 天内,可追加条件 AND DAY
  • ? 若站点面向多时区用户,应统一以 UTC 存储并转换,而非依赖服务器本地时间。

总结:时间逻辑不应全押在 PHP 循环里。善用 MySQL 的日期函数与排序能力,既能提升性能,又能写出更健壮、可维护的调度逻辑。

相关专题

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

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

1963

2023.09.01

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

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

1290

2023.10.11

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

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

1196

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课时 | 777人学习

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

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