2011-07-22 63 views
0

我使用PHP來安排圖像在特定時間在網站上出現。我很好,直到有一張照片出現在上午9:42說,並在上午10:42結束。一個可以獲得小時數和部分小時數,但我不知道如何安排連續多個部分小時數。這是我使用php if else語句時間表

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) 

回答

1

如果你想比較「部分小時」,那麼最好將小時和分鐘合併成一個值。你經常可以逃脫hours*100+minutes

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

所以$hhmm1230爲上午12:30,或1942爲下午7時42分。數字在1759到1800之間跳躍,但這不是問題,因爲您只想在時間範圍內與< =和=>進行比較。

此外,我將完全重寫的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), 
))); 
+0

謝謝你,我要去試一試。數據(「H」)是用e還是a表示日期(「H」)? – Jason

+0

是的,這是一個錯字。 'date()'當然。 – mario

+0

我創建了一個時間表,出於某種原因,一些小時工作,一些小時不工作,我找不到任何特定的原因,但是當我重置我的時鐘時,例如8:00 PM工作,但是9:00 PM和7:00 PM不工作,這裏是我正在做的部分代碼: – Jason

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

恐怕我不明白開關,我我們將不得不研究它。 – Jason