2014-07-22 20 views
0

我正在建設預訂的web應用程序。 我有數組從服務拉,包含阻止的日期。 使用日曆小部件我想在2014年7月30日至2014年8月4日期間預訂。因爲我的預約日期 受阻日期被找到(第2指數[2014-08-01 - 2014年8月2日]被阻塞則應該返回false(不能繼續保留)比較checkin結帳日期與陣列blockdates

$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; 

我需要你的幫助球員。之前,謝謝。

回答

0

你有一個錯誤「($簽入> = $日期[ '開始'] & & $籤< = $日期[ '端'])||($結帳< = $日期[ 'start'] & & $ checkout> = $ date ['end'])「 條件語句從未形成,所以總是返回true

+0

是的,我堅持這一點。任何想法? –

+0

if(($ checkin> = $ date ['start'] && $ checkin <= $ date ['end'])||($ checkout> = $ date ['start'] && $ checkout <= $ date [ 'end'])){ return false; } – user3863004

+0

我沒有看到區別? 仍然成立。我認爲用這種簡單的比較是無法解決的。 > ,, < –

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