将checkin结帐日期与数组封锁进行比较

时间:2014-07-22 02:59:10

标签: php arrays date

我正在构建预订网络应用。 我从服务中提取数组,包含阻止日期。 使用日历小部件我想在2014-07-30至2014-08-04期间预订。 因为我的预订日期是在阻止日期中找到的(第二个索引[2014-08-01 - 2014-08-02]被阻止然后应该返回false(无法继续预订)。

$checkin = '2014-07-30';
$checkout = '2014-08-04';

$blockedDates = array(
    array(
        'start' => '2014-07-24',
        'end' => '2014-07-27'
    ),
    array(
        'start' => '2014-08-01',
        'end' => '2014-08-02'
    ),
    array(
        'start' => '2014-08-12',
        'end' => '2014-08-15'
    )
);

function morfora($blokedDates, $checkin, $checkout)
{
    foreach ($blokedDates as $date) {
        if (($checkin >= $date['start'] && $checkin <= $date['end']) || ($checkout <= $date['start'] && $checkout >= $date['end'])) {
            return false;
        }
    }

    return true;
}

var_dump(morfora($blokedDates, $checkin, $checkout)); //still true; should be false;

我需要你们的帮助,谢谢你们。

2 个答案:

答案 0 :(得分:0)

你错了#34;($ checkin&gt; = $ date [&#39; start&#39;]&amp;&amp; $ checkin&lt; = $ date [&#39; end&#39; ])|| ($ checkout&lt; = $ date [&#39; start&#39;]&amp;&amp; $ checkout&gt; = $ date [&#39; end&#39;])&#34; 条件语句永远不会形成,所以总是返回true

答案 1 :(得分:0)

试试这个:

function checkBookedDate($start_date, $end_date, $date_range)
{
    /**
     * @var $start_object DateTime
     */
    $start_object = DateTime::createFromFormat('Y-m-d', $start_date);
    $end_object = DateTime::createFromFormat('Y-m-d', $end_date);
    if (is_array($date_range)) {
        foreach ($date_range as $row) {
            $range_start = DateTime::createFromFormat('Y-m-d', $row['start']);
            $range_end = DateTime::createFromFormat('Y-m-d', $row['end']);
            if (($start_object > $range_start && $start_object < $range_end) ||
                    ($end_object > $range_start && $end_object < $range_end)) {
                return true;
            }
        }
        return false;
    } else {
        return false;
    }
}