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 之间检查时,它会显示“有藤壶!”

我假设从 22:00 跳转到 02:00 会使脚本混淆,因为 02:00 小于 22: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 回答
1

使用日期时,您应该始终使用对象来帮助您喜欢DateTime。这些对象将帮助您操作日期并获取时间戳。当您比较日期时,使用时间戳总是一个想法。

希望它有所帮助。

于 2013-04-03T13:18:42.283 回答
0

你应该用 mktime 转换你的时间,然后你可以检查一个时间是否大于另一个,检查http://php.net/manual/en/function.mktime.php

于 2013-04-03T13:08:56.840 回答
0

只是一个疯狂的猜测。您是否尝试过在 22:00<->2:00 条件之前移动最后一个条件(elseif),并仅在一个条件下使您的 22:00 条件 -> 仅 >22:00(没有 <2:00)

于 2013-04-03T13:09:32.093 回答