2016-01-21 52 views
0

我有一箱文字不應該在兩次之間顯示,例如20和01(24小時制),但它也應該有效,當我選擇不顯示例如,在20和22之間的框。PHP如果兩次之間的條件

但是,如果我有:

$start = "20"; 
$end = "01"; 
$now = date('H'); 

if($now > $start AND $now < $end) { 
    echo "DONT SHOW THE BOX"; 
} else { 
    echo "SHOW THE BOX"; 
} 

我如何,我可以轉換的數字,可以使用mktime()即使我沒有約會?因爲這個盒子應該在那個時間範圍內每天被激活。

+0

你的代碼應該可以正常工作。但是你總是可以像'(int)$ start'那樣對它進行類型轉換,或者你也可以使用'intval($ start)'。 – choz

+0

嗨choz,是代碼工作,但問題是當它在20和01之間,我希望它不顯示任何東西。如果我測試20和01之間的if函數,它將打印「顯示盒子」,它應該打印「不顯示盒子」。我會嘗試你的建議。 –

+0

我明白你的意思。檢查答案。 – choz

回答

3

不想顯示20:00之間箱子01:00

目前在if($now > $start AND $now < $end)你的邏輯有點混亂。

如果你希望$start = 20$end = 1那麼什麼樣的價值是$now可能超過20並小於1

你的if語句邏輯會經常去ELSE任何的$now值。

但還有另一種解決方法來切換這樣的邏輯。

顯示02:00之間的箱至19:00

,而不是周圍的其他方法。

所以,你可以做到這一點,

$start = "20"; 
$end = "01"; 
$now = date('H'); 

if ($now > $end && $now < $start) 
{ 
    echo "SHOW THE BOX"; 
} 
else 
{ 
    echo "DON'T SHOW"; 
} 

更新1:

現在,你想展示20:00之間的箱至22:00

你可以做反之亦然,或者你現在的邏輯是什麼。像,

$start = "20"; 
$end = "22"; 
$now = date('H'); 

if ($now >= $start && $now <= $end) 
{ 
    echo "DON'T SHOW"; 
} 
else 
{ 
    echo "SHOW THE BOX"; 
} 

更新2:

如果$start$end變化,你可以隨時如果條件包裹他們在另一個。像,

if ($start > $end) 
{ 
    if ($now > $end && $now < $start) 
    { 
     echo "SHOW THE BOX"; 
    } 
    else 
    { 
     echo "DON'T SHOW"; 
    } 
} 
else if ($start < $end) 
{ 
    if ($now >= $start && $now <= $end) 
    { 
     echo "DON'T SHOW"; 
    } 
    else 
    { 
     echo "SHOW THE BOX"; 
    } 
} 
+0

多數民衆贊成在很大,但我的問題是,那麼,如果我想要框中不顯示20和22而不是20和01之間? –

+0

@RasmusKjeldsen然後你可以像'if now($ now> = 20 && $ now <= 22){//不顯示da box} else {}'這樣做,這是你當前的邏輯。 – choz

+0

但是不會讓我回到我開始的地方,所以如果時間再次在20到01之間,我又會遇到問題?我真的很喜歡它,所以我只是設定一個開始時間和結束時間,無論是晚上還是白天,如果算出來的話。 –

0

該代碼不是很漂亮,但我認爲這是你是什麼後?

define('START_TIME', 6); 
define('END_TIME', 1); 

$startTime = new DateTime(); 
$startTime->setTime(START_TIME, 0); 

$endTime = clone $startTime; 
if (START_TIME > END_TIME) { 
    $endTime->modify('+1 day'); 
} 
$endTime->setTime(END_TIME, 0); 

$currentTime = new DateTime(); 

if ($currentTime > $startTime && $currentTime < $endTime) { 
    echo 'Show box'; 
} else { 
    echo 'Don\'t show box'; 
} 

您可以更改小時數以決定何時顯示/隱藏的開始/結束小時數。如果結束小時數小於開始小時數,那麼它將假定結束小時數應該是第二天。

它可能會被清理一些,但如果這是你以後的事情,我會把它留在你的手中。