2016-01-21 75 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'; 
} 

您可以更改小时数以决定何时显示/隐藏的开始/结束小时数。如果结束小时数小于开始小时数,那么它将假定结束小时数应该是第二天。

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