【问题标题】:How can I create an automatic update on a web page based on date/time?如何根据日期/时间在网页上创建自动更新?
【发布时间】:2021-12-11 00:18:45
【问题描述】:

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

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

如果有人比我更有资格,我将不胜感激。

提前致谢。

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

$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);
}

【问题讨论】:

    标签: php mysql datetime


    【解决方案1】:

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

    <?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);
    

    Test PHP code online

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

    <?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 sandbox

    使用数据库:

    <?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 test

    【讨论】:

    • 请看我的更新。该代码可以工作几个小时,但似乎忽略了几分钟。我该如何纠正这个问题?
    • 您应该在数组中使用字符串索引,例如 '21:30' 而不是 21.30 : phpize.online/…
    • 我已经按照您的建议完成了,现在代码正在按要求工作。我已经更新了我的原始帖子以显示完整的工作代码,希望它可能对其他人有所帮助。显然我不应该说谢谢 Slava,但可以确认你的建议是最有帮助的。
    猜你喜欢
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多