检查时间是否介于两次之间

时间:2014-10-18 09:35:18

标签: php time

我的交易时间为每周五22:00至4:00。但问题是,在00:00之后,它将转向星期六,我的代码将不再找到交易。

以下是我如何保存优惠:

Array
(
    [0] => Array
        (
            [offerAvailableOn] => 5
            [open] => 22:00 
            [close] =>  04:00
        )
}

这是我查询它的代码:

$today = date('N');
$timeNow = date('H:i');

但是当今天的星期六是星期六时,它却找不到我的报价。

2 个答案:

答案 0 :(得分:2)

您可以将openclose变量包含在一周中的某一天。看一下本手册的这个页面:

http://php.net/manual/en/datetime.formats.relative.php

所以open可以'Friday 22:00' en close可以是'Saturday 04:00'。在PHP中看起来像这样:

$deal = array('open'  => 'Friday 22:00',
              'close' => 'Saturday 04:00');

echo 'deal open: '.date('Y-m-d H:i:s', strtotime($deal['open'])).'<br>';
echo 'deal close: '.date('Y-m-d H:i:s', strtotime($deal['close']));

对我而言,现在给出:

deal open: 2014-10-24 22:00:00
deal close: 2014-10-18 04:00:00

请注意,交易open时间比当前时间更长。所以你必须考虑你的if条件:

$open  = strtotime($deal['open']);
$close = strtotime($deal['close']);
$now   = time();

$dealIsOn = (($open > $now) && ($close < $now));

一开始可能看起来反直觉,但是正确的。

另请注意,此系统非常灵活。使用相同的代码,您可以选择一个月中的某一天。但是,对于绝对日期,您必须再次检查:

$open  = strtotime('2014-10-25 22:00:00');
$close = strtotime('2014-10-26 22:00:00');
$now   = time();

$dealIsOn = (($open < $now) && ($close > $now));

所以我会在数组中引入一个标志,指示openclose变量是绝对的还是相对的。

答案 1 :(得分:0)

将其更改为两个测试。该优惠服务于周五22:00或之后以及周六4:00或更早时间提供。