0

ポスターとして StackOverflow を使用するのは初めてで、通常は単なるブラウザーですが、今回は自分で問題に遭遇しました。

現在時刻に基づいて特定の変数を設定するスクリプトがあります。

<?php
// Sunday
if( in_array($day, array(Sun)) ){
echo 'Conditions = Day:' . $day . ' ' . 'Time: ' . $current_time;
if (($current_time >= '06:01') && ($current_time <= '10:00')) {
    $stime = '06:00';
    $etime = '10:00';
    $showname = 'Dimitri Jegels';
 $image = 'images/placeholder/on-air.jpg';
//  echo $stime . ' and' . $etime . ' & ' . $showname . ' & ' . $image;
} elseif (($current_time >= '10:01') && ($current_time <= '14:00')) {
    $stime = '10:00';
    $etime = '14:00';
    $showname = 'Benito Vergotine';
 $image = 'images/placeholder/on-air.jpg';
//  echo $stime . ' and' . $etime . ' & ' . $showname . ' & ' . $image;
} elseif (($current_time >= '14:01') && ($current_time <= '18:00')) {
    $stime = '14:00';
    $etime = '18:00';
    $showname = 'Gavin Arends';
 $image = 'images/placeholder/on-air.jpg';
//  echo $stime . ' and' . $etime . ' & ' . $showname . ' & ' . $image;
} elseif (($current_time >= '18:01') && ($current_time <= '22:00')) {
    $stime = '18:00';
    $etime = '22:00';
    $showname = 'Tracy Lange';
 $image = 'images/placeholder/on-air.jpg';
//  echo $stime . ' and' . $etime . ' & ' . $showname . ' & ' . $image;
} elseif (($current_time >= '22:01') && ($current_time <= '02:00')) {
    $stime = '22:00';
    $etime = '02:00';
    $showname = 'Mehboob Bawa';
 $image = 'images/placeholder/on-air.jpg';
//  echo $stime . ' and' . $etime . ' & ' . $showname . ' & ' . $image;
} elseif (($current_time >= '02:01') && ($current_time <= '06:00')) {
    $stime = '02:00';
    $etime = '06:00';
    $showname = 'Training Slot';
 $image = 'images/placeholder/on-air.jpg';
//  echo $stime . ' and' . $etime . ' & ' . $showname . ' & ' . $image;
} else {
    $stime = '??:??';
    $etime = '??:??';
    $showname = 'There is a barnacle!';
}
}
?>

スクリプトは正常に動作します。たとえば、13:00 の場合、10:00 と 14:00 の間をチェックします。

しかし、時刻が 23:30 で、22:00 から 02:00 の間でチェックすると、「フジツボがいます!」と表示されます。

02:00 が 22:00 未満であるため、22:00 から 02:00 へのジャンプがスクリプトを混乱させると思いますか?

最もきれいなコードや最良の方法ではありませんが、これを克服する方法を誰かが提案できるかどうか知りたいですか?

4

4 に答える 4

1

この特殊なケースには OR 条件を使用できます。

} elseif (($current_time >= '22:01') || ($current_time <= '02:00')) {

しかし、すでに述べたように、あなたのコードはあまりきれいではありません!

多分これは少し良いでしょう:

$names = array('Mehboob Bawa', 'Training Slot', 'Dimitri Jegels', 'Benito Vergotine', 'Gavin Arends', 'Tracy Lange');
$hours = getdate()["hours"];
$interval = (int)((($hours + 2) % 24) / 4);
$showname = $name[$interval];
$image = 'images/placeholder/on-air.jpg'; // can be also done via an array, if not always the same
$stime = ($interval * 4 + 22) % 24;
$etime = ($interval * 4 + 2) % 24;
于 2013-04-03T13:09:44.437 に答える
0

時間を mktime で変換する必要があります。その後、時間が別の時間よりも大きいかどうかを確認できます。http ://php.net/manual/en/function.mktime.phpを確認してください。

于 2013-04-03T13:08:56.840 に答える
0

勝手な推測です。最後の条件 (elseif) を 22:00<->2:00 条件の前に移動しようとし、22:00 条件を 1 つの条件のみで作成しようとしましたか? >22:00 のみ (<2:00 なし)

于 2013-04-03T13:09:32.093 に答える