You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于日期和时间实现网页内容自动更新 适配网络电台节目展示场景

PHP实现按时间自动展示电台当前播放节目

实现方案选择

你可以根据自己的节目更新频率选两种方案:

方案一:数组存储方案(你当前选用的,适合节目固定的场景)

该方案无需配置数据库,部署简单,修改节目时直接调整数组内容即可。你已修复的分钟匹配逻辑是正确的,这里给出优化后的完整可运行代码,修复了原代码中printf放在循环内会多次输出的问题:

<?php
// 先设置正确的时区,替换为你电台所在的时区
date_default_timezone_set('Asia/Shanghai');

// 节目配置数组,键为星期几(1=周一,7=周日),值为[开始时间=>节目名]的数组,时间按升序排列
$shows = [
    // 周三的节目示例
    3 => [
        '20:00' => 'Test result A',
        '20:30' => 'Test result B',
        '21:00' => 'Test result C',
        '21:10' => 'Test result D',
        '21:30' => 'Test result E'
    ],
    // 周一到周五的早间节目示例
    1 => [
        '08:00' => 'The Breakfast Show',
        '10:00' => 'The Fred and Lucy Hour'
    ],
    7 => [
        '18:00' => 'The Hymn Hour'
    ]
];

$weekday = date('N');
$current_time = date('H:i');
$now_playing = '默认节目';

// 只有当前星期有配置节目时才遍历
if (isset($shows[$weekday])) {
    foreach ($shows[$weekday] as $start_time => $show_name) {
        if ($start_time <= $current_time) {
            $now_playing = $show_name;
        }
    }
}

printf("正在播出:%s", $now_playing);
?>

注意事项:

  • 所有节目开始时间必须按从早到晚的升序排列,才能匹配到最近的开播节目
  • 如果需要实时更新不需要用户刷新页面,可以加一段JS代码定时请求这个节目接口更新页面展示内容

方案二:SQL数据库存储方案(适合节目更新频繁、需要后台管理的场景)

如果后续节目量变大,调整频繁,用数组修改太麻烦,可以切换到数据库方案,步骤如下:

  1. 新建节目表,参考SQL结构:
CREATE TABLE radio_shows (
    id INT AUTO_INCREMENT PRIMARY KEY,
    weekday TINYINT NOT NULL COMMENT '1=周一,7=周日',
    start_time TIME NOT NULL COMMENT '节目开始时间',
    show_name VARCHAR(100) NOT NULL COMMENT '节目名称',
    is_active TINYINT DEFAULT 1 COMMENT '是否生效'
);
  1. PHP连接数据库查询当前节目示例:
<?php
date_default_timezone_set('Asia/Shanghai');
$weekday = date('N');
$current_time = date('H:i:s');
$now_playing = '默认节目';

// 连接数据库,替换为你自己的数据库配置
$pdo = new PDO('mysql:host=localhost;dbname=你的库名;charset=utf8', '用户名', '密码');
$stmt = $pdo->prepare("SELECT show_name FROM radio_shows WHERE weekday = ? AND start_time <= ? AND is_active = 1 ORDER BY start_time DESC LIMIT 1");
$stmt->execute([$weekday, $current_time]);
$res = $stmt->fetchColumn();
if ($res) {
    $now_playing = $res;
}

printf("正在播出:%s", $now_playing);
?>

内容的提问来源于stack exchange,提问作者David CA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:24:04