0

時刻と曜日に応じて、2つの異なる画像を表示するコードを作成しようとしています。

月曜日から金曜日の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

基本的な欠陥は、 (値を割り当てる)の代わりに(2つの値が等しいかどうか==テストする)を使用する必要があることです。しかし、ほとんどのコードは煩雑であり、ルーチン全体をはるかにコンパクトな方法で記述できます。ちょうど試して:=

$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ステートメントの数ではなく、if、else if、elseラダーを検討することもできます。現状では、最初のifステートメントが「正しい」ステートメントである場合でも、最後のステートメントが失敗するため、は$imgに設定されます。closed.pngif

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

非常に簡単で読みやすいimho

于 2012-06-19T08:12:26.363 に答える