php if else语句时间表

时间:2011-07-22 13:00:38

标签: php date schedule

我正在使用PHP来安排图像在特定时间出现在网站上。我很好,直到一张照片出现在上午9:42并在上午10:42结束。 a可以获得最高时间和部分时间以小时结束,但我无法弄清楚如何连续安排多个部分小时。这就是我正在使用的

date_default_timezone_set('America/Los_Angeles');
$h = date('G');
$m = date('i'); 
$d = date('w');
$year = date('Y');

// MONDAY SCHEDULE
if ($d == 1 && $h >= 0 && $h < 1) { $img = 'opendoor.jpg'; }
else if ($d == 1 && $h >= 13 && $h < 14) { $img = 'newtime.jpg'; } 
else if ($d == 1 && $h >= 14 && $h < 15) { $img = 'weekend'; }
else if ($d == 1 && $h >= 15 && $h < 16) { $img = 'today.jpg'; }
else if ($d == 1 && $h >= 16 && $h <= 17 && $m >= 0 && $m < 30) { $img = 'walk.jpg'; }
else if ($d == 1 && $h >= 17 && $h < 19 && $m > 30) { $img = 'new.jpg'; }
else if ($d == 1 && $h >= 19 && $h < 20 && $m < 30) { $img = 'default.jpg'; }
else if ($d == 1 && $h >= 19 && $h < 20 && $m > 30) { $img = 'test.jpg'; }

我跟着一个非常好的例子给我提出了我的问题,但是没有明显的理由,有些工作时间有些工作,有些则不工作。当我在一小时内回复$ img时,代码被打印,但是在省略之前或之后的一小时。以下是我正在做的部分代码:

date_default_timezone_set('America/Los_Angeles');
$h = date('G');
$m = date('i'); 
$d = date('w');
$hhmm = date('H') * 100 + date("i");

$img = key(array_filter(array(
'images/hosts/image1.jpg' => ($d == 0 && $h >= 0 && $h < 1),
'images/hosts/image2.jpg' => ($d == 0 && $hhmm >= 0100 && $hhmm <= 0542 ),
'images/hosts/image3.jpg' => ($d == 0 && $hhmm >= 0542 && $hhmm <= 0600),
'images/hosts/image4' => ($d == 0 && $hhmm >= 0600 && $hhmm < 0630),
'images/hosts/image5' => ($d == 0 && $hhmm >= 0630 && $hhmm < 0800),
'images/hosts/image5.jpg' => ($d == 6 && $h >= 8 && $h < 9)

2 个答案:

答案 0 :(得分:1)

如果要比较“部分小时”,则最好将小时和分钟合并为一个值。您经常可以使用hours*100+minutes

 $h = date('G');
 $m = date('i'); 
 $d = date('w');
 $hhmm = data("H") * 100 + date("i");

因此,$hhmm将于上午12:30为1230,或在下午7:42为1942。数字在1759和1800之间跳跃,但这不是问题,因为您只想与&lt; =和=&gt;进行比较。无论如何都要在时间范围内。

此外,我会完全将if / else链重写为数组比较:

$img = key(array_filter(array(
   'opendoor.jpg' => ($d == 1 && $h >= 0 && $h < 1),
   'newtime.jpg' => ($d == 1 && $h >= 13 && $h < 14),
      ...
   'partialhours.jpg' => ($hhmm => 2142  &&  $hhmm <= 2242),
)));

答案 1 :(得分:0)

请使用switch

switch ($d)
{
  case 1:
    switch ($h)
    {
      case 1:  $img = 'opendoor.jpg'; break;
      case 13: $img = 'newtime.jpg';  break;
      case 14: $img = 'weekend.jpg';  break;
      case 15: $img = 'today.jpg';    break;
      case 16:
        if ($m<30) $img = 'walk.jpg';
        break;
      case 17:
        $img = ($m>30) ? 'new.jpg':'walk.jpg';
        break;
      case 18:
        if ($m>30) $img = 'new.jpg';
        break;
      case 19:
        $img = ($m>30) ? 'test.jpg':'default.jpg';
        break;
    }
    break;
}