首页 > 解决方案 > 如何根据日期/时间在网页上创建自动更新?

问题描述

我正在管理一个互联网广播电台网页,我想根据星期几/一天中的时间为电台节目添加一个自动条目。例如,周一至周五上午 8 点,“正在播放”标题显示“早餐秀”,上午 10 点更改为“弗雷德和露西小时”,周日下午 6 点显示“赞美诗小时” “”等等等等。

我已经研究出如何使用 PHP 在网页上获取服务器日期和时间,我猜这应该以某种方式链接到包含所有节目及其时间的 SQL 数据库,但作为 PHP 和SQL 我不知道如何将它们链接在一起(如果确实可能的话)或者是否需要任何其他额外的编程。

我会很感激比我更有资格的人指导正确的方向。

提前致谢。

更新:-出于各种原因,我选择使用基于工作日/时间/节目数组的编码,最初它似乎运行良好,直到我意识到即使我设置了“$hour = date('H:i' );",代码似乎忽略了数组列表中的分钟数。根据进一步的建议(见下面的评论),我已经克服了这个问题,下面的代码已经更新,现在正在使用中。(注意我展示了一个缩短的数组测试版本,可以根据需要进行修改和添加。):-

$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'
    ],
];

$weekday = date('N');
$hour = date('H:i');
$now_plaing = 'Default show';
    
foreach($shows[$weekday] as $h=>$show) {
    if ($h <= $hour) $now_plaing = $show;

printf("On Air Now: %s", $now_plaing);
}

标签: phpmysqldatetime

解决方案


您可以使用这样的简单代码:

<?php
$weekday = date('N');
$hour = date('H');
if (1 <= $weekday && $weekday <= 5) {
    // Monday to friday
    if ( $hour > 8 ) {
        $now_plaing = 'The Breakfast Show';
    } elseif ( $hour >=10 ) {
        $now_plaing = 'The Fred and Lucy Hour';
    } else {
        $now_plaing = 'Some good show';
    }
} elseif ($weekday == 7) {
    // Sunday
    
    if ( $hour > 6 ) {
        $now_plaing = 'The Hymn Hour';
    } else {
        $now_plaing = 'Sunday good show';
    }
}

printf("Now Playing: %s", $now_plaing);

在线测试PHP代码

另一种方法是构建显示数组(或从数据库中获取)并使用另一个代码:

<?php

$shows = [
    1 => [
        0 => 'Morning show',
        8 => 'The Breakfast Show',
        10 => 'The Fred and Lucy Hour'
    ],
    /*** each day shows array ***/
    7 => [
        0 => 'Sunday good show',
        6 => 'The Hymn Hour'
    ]
];

$weekday = date('N');
$hour = date('H');
$now_plaing = 'Default show';
    
foreach($shows[$weekday] as $h=>$show) {
    if ($h <= $hour) $now_plaing = $show;
}

printf("Now Playing: %s", $now_plaing);

PHP沙箱

使用数据库:

<?php

$weekday = date('N');
$hour = date('H:i');
$now_plaing = 'Default show';
    
$query = "SELECT show_name FROM shows WHERE weekday = ? AND start_at <= ? ORDER BY start_at DESC LIMIT 1;";
$stmt = $pdo->prepare($query);
$stmt->execute([$weekday, $hour]);

$show = $stmt->fetch(PDO::FETCH_ASSOC);

printf("Now at %s playing: %s", $hour, $show['show_name']);

SQL + PHP 测试


推荐阅读