0

我正在尝试制作一个代码,该代码将根据时间和日期显示两个不同的图像。

我希望它在周一至周五之间的 7:25 - 12:40 和 13:30 - 14:10 之间显示“开放”的图像。在周末和任何其他时间,它应该显示“关闭”的图像。

这是我一直试图开始工作的代码。

    <?php
date_default_timezone_set('Europe/Copenhagen');

$h = date('Gi'); //G (timer) = 0 til 23 og i (minutter) = 00 til 59

$d = date('N'); //1 (for mandag) til 7 (for søndag)


// MANDAG
if ($d = '1' && $h >= 745 && $h < 1240) $img = 'images/open.png';
if ($d = '1' && $h >= 1330 && $h < 1410) $img = 'images/open_red.png';

// TIRSDAG
if ($d = '2' && $h >= 745 && $h < 1240) $img = 'images/open.png';
if ($d = '2' && $h >= 1330 && $h < 1410) $img = 'images/open_red.png';

// ONSDAG
if ($d = '3' && $h >= 745 && $h < 1240) $img = 'images/open.png';
if ($d = '3' && $h >= 1330 && $h < 1410) $img = 'images/open_red.png';

// TORSDAG
if ($d = 4 && $h >= 745 && $h < 1240) $img = 'images/open.png';
if ($d = 4 && $h >= 1330 && $h < 1410) $img = 'images/open_red.png';

// FREDAG
if ($d = 5 && $h >= 745 && $h < 1240) $img = 'images/open.png';

// LØRDAG


// SØNDAG


else $img = 'images/closed.png';
?>

<img src="<?php echo $img; ?>">

由于某种原因,它忽略了 day 变量并简单地打印出最后一个条目,即“fredag​​”(星期五)。

4

4 回答 4

1

一个基本缺陷是您应该使用==测试两个值是否相等)而不是=分配一个值)。但是大部分代码都很麻烦,整个例程可以用更紧凑的方式编写。试试看嘛:

$h = date('Gi'); 
$d = date('N');

$img = "images/closed.png";

if ( ($d >= 1 && $d <= 6) && ($h >= 745 && $h < 1240) ) $img = "images/open.png";
elseif ( ($d >= 1 && $d <= 5) && ($h >= 1330 && $h < 1410) ) $img = "images/open_red.png";

就这样 :)

于 2012-06-19T07:54:47.827 回答
0

如果实际落入多个不同的分支,但每次连续if覆盖。$img

您的主要问题是您不是在比较$d事物,而是$d每次都分配值。为了比较,您需要双等号:==if ($d == 5 && ...

此外,您可能会考虑使用 if、else if、else 阶梯而不是多个 if 语句。就目前而言,如果第一个if语句是“正确的”语句,$img则仍将设置为,closed.png因为它未通过最后一个if语句。

如果您正确使用了 if、else if、else 阶梯,就不会发生这种情况(并且您的脚本会运行得更快一些)。


TLDR:这应该有效:

$h = date('Gi'); //G (timer) = 0 til 23 og i (minutter) = 00 til 59

$d = date('N'); //1 (for mandag) til 7 (for søndag)


// MANDAG
if ($d == 1 && $h >= 745 && $h < 1240){ $img = 'images/open.png'; }
elseif ($d == 1 && $h >= 1330 && $h < 1410){ $img = 'images/open_red.png'; }

// TIRSDAG
elseif ($d == 2 && $h >= 745 && $h < 1240){ $img = 'images/open.png'; }
elseif ($d == 2 && $h >= 1330 && $h < 1410){ $img = 'images/open_red.png'; }

// ONSDAG
elseif ($d == 3 && $h >= 745 && $h < 1240){ $img = 'images/open.png'; }
elseif ($d == 3 && $h >= 1330 && $h < 1410){ $img = 'images/open_red.png'; }

// TORSDAG
elseif ($d == 4 && $h >= 745 && $h < 1240){ $img = 'images/open.png'; }
elseif ($d == 4 && $h >= 1330 && $h < 1410){ $img = 'images/open_red.png'; }

// FREDAG
elseif ($d == 5 && $h >= 745 && $h < 1240){ $img = 'images/open.png'; }

// LØRDAG


// SØNDAG


else{ $img = 'images/closed.png'; }
?>

<img src="<?php echo $img; ?>">
于 2012-06-19T07:57:42.490 回答
0

您使用=哪个分配,什么时候应该使用==哪个比较。

else还附加到最后一个if,因此您只会在星期五看到“打开”图像。使用大括号使 if/elseif/else 结构对您自己更清楚。

更好的方法是默认将其设置为“关闭”,然后使用 if/else 结构(带大括号,始终带大括号!),如下所示:

$h = date('Gi'); //G (timer) = 0 til 23 og i (minutter) = 00 til 59

$d = date('N'); //1 (for mandag) til 7 (for søndag)

$img = 'images/closed.png'; // By default the image is "closed"

if ($d < 6) // If Monday to Friday
{
    if ($h >= 745 and $h < 1240) // If early
    {
        $img = 'images/open.png'; // then it's open
    } 
    elseif ($h >= 1330 and $h < 1410 and $day != 5) // If late, and NOT Friday
    { 
        $img = 'images/open_red.png'; // then it's red open
    }
}

?>

<img src="<?php echo $img; ?>">
于 2012-06-19T07:59:49.087 回答
0

我会在这方面寻求一些东西:

list($day_of_week, $hour_minute) = explode(' ', date('N Gi'));

 switch( $day_of_week ) {
    case '7':
    case '6':
        # weekend days, always closed:
        $image = 'closed.png';
    break;
    default:
        # weekdays, so check the time instead:
        if ( ( (int)$hour_minute >= 745 && (int)$hour_minute <= 1240 ) || ( (int)$hour_minute >= 1330 && (int)$hour_minute <= 1410 ) ) {
            $image = 'open.png';
        } else {
            $image = 'closed.png';
        }
    break;
}

非常直接且易于阅读恕我直言

于 2012-06-19T08:12:26.363 回答