2015-07-13 88 views
0

我下面的表格有一個說法:比較2個時間戳,並設置基於結果

------------------------------------------- 
|id|list_id|start_date|end_date|min_nights| 
------------------------------------------- 
|17| 55 |1437487200|1437735600|3| 
|18| 55 |1438005600|1438167600|2| 

我想顯示每個範圍的最小的夜晚。 PHP:

//Seasonal Price 
    //1. Store all the dates between checkin and checkout in an array 
    $checkin_time = get_gmt_time(strtotime($checkin)); 
    $checkout_time = get_gmt_time(strtotime($checkout)); 
    $travel_dates = array(); 
    $seasonal_prices = array(); 
    $total_nights = 1; 
    $total_price = 0; 
    $is_seasonal = 0; 
    $i = $checkin_time; 
    while ($i < $checkout_time) { 
     $i = get_gmt_time(strtotime('+1 day', $i)); 
     $checkin_date = date('m/d/Y', $i); 
     $checkin_date = explode('/', $checkin_date); 
     $travel_dates[$total_nights] = $checkin_date[1] . $checkin_date[0] . $checkin_date[2]; 
     $total_nights++; 
    } 


    for ($i = 1; $i < $total_nights; $i++) { 
     $seasonal_prices[$travel_dates[$i]] = ""; 
    } 
    //Store seasonal price of a list in an array 
    $seasonal_query = $this->Common_model->getTableData('seasonalprice', array('list_id' => $id)); 

    //vaild array checked ilan 
    $seasonal_result = $seasonal_query->result_array(); 
    if ($seasonal_query->num_rows() > 0) { 
     foreach ($seasonal_result as $time) { 

      //Get Seasonal price 
      $seasonalprice_query = $this->Common_model->getTableData(

     'seasonalprice', array(
      'list_id' => $id, 
      'start_date' => $time['start_date'], 
      'end_date' => $time['end_date'] 

      )); 
      $seasonalprice = $seasonalprice_query->row()->price; 
      $seasonal_min_nights = $seasonalprice_query->row()->min_nights; 


      //Days between start date and end date -> seasonal price 
      $start_time = $time['start_date']; 
      $end_time = $time['end_date']; 
      $i = $start_time; 
      while ($i <= $end_time) { 
       $start_date = date('m/d/Y', $i); 
       $s_date = explode('/', $start_date); 
       $s_date = $s_date[1] . $s_date[0] . $s_date[2]; 
       $seasonal_prices[$s_date] = $seasonalprice; 
       $i = get_gmt_time(strtotime('+1 day', $i)); 
      } 

     } 

然後有以下條件:

//half-day booking functionality 
    //add time up to 2PM 
    $checkin_timestamp = get_gmt_time(strtotime($checkin)) + (14 * 60 * 60); 
    //add time up to 11AM 
    $checkout_timestamp = get_gmt_time(strtotime($checkout)) + (11 * 60 * 60); 



    $query = $this->db->query('SELECT id, list_id FROM `calendar` WHERE `list_id` = "' . $id . '" AND (`booked_days` BETWEEN ' . $checkin_timestamp . ' AND ' . $checkout_timestamp . ') GROUP BY `list_id`'); 
    $rows = $query->num_rows();   

    $daysexist = $this->db->query("SELECT id,list_id,booked_days FROM `calendar` WHERE `list_id` = '" . $id . "' AND (`booked_days` BETWEEN " . $checkin_timestamp . " AND " . $checkout_timestamp . ") GROUP BY `list_id`"); 

    $rowsexist = $daysexist->num_rows(); 
    if ($rowsexist > 0) { 

    echo '{"available":false,"total_price":' . $data['price'] . ',"reason_message":"Those dates are not available"}'; 
    } 

    if ($data['guests'] > $capacity) { 
     echo '{"available":false,"total_price":' . $data['price'] . ',"reason_message":"' . $capacity . ' guest(s) only allowed"}'; 
    } 

    elseif ($is_seasonal == 1 && $total_nights -1 < $seasonal_min_nights) { 
     echo '{"available":false,"total_price":"0","reason_message":"Minimum stay is ' . $data['min_nights_seasonal'] . ' nights for the following period: '.date('m/d/Y', $start_time).' - '.date('m/d/Y', $end_time).'"}'; 
     exit; 
    } 


    $this->session->set_userdata("total_price_'" . $id . "'_'" . $this->dx_auth->get_user_id() . "'", $data['price']); 
    $staggered_price = ""; 

    if ($days >= 30) { 
    $staggered_price = ',"staggered_price":"' . get_currency_symbol($id) . get_currency_value1($id, $data['price']) . '","staggered":false'; 
    } 

    elseif (isset($extra_guest)) { 
    if ($extra_guest == 1) { 
    echo '{"service_fee":"' . get_currency_symbol($id) . get_currency_value_lys($row->currency, get_currency_code(), $data['commission']) . '","extra_guest_price":"' . get_currency_symbol($id) . get_currency_value1($id, $extra_guest_price) . '","extra_guest":1,"reason_message":"","price_per_night":"' . get_currency_symbol($id) . get_currency_value1($id, $per_night) . '","nights":' . $days . ',"available":true,"can_instant_book":false,"total_price":"' . get_currency_symbol($id) . get_currency_value1($id, $data['price']) . '"' . $staggered_price . '}'; 
    } 
    } 

    else { 
    echo '{"service_fee":"' . get_currency_symbol($id) . get_currency_value_lys($row->currency, get_currency_code(), $data['commission']) . '","reason_message":"","price_per_night":"' . get_currency_symbol($id) . get_currency_value1($id, $per_night) . '","nights":' . $days . ',"available":true,"can_instant_book":false,"total_price":"' . get_currency_symbol($id) . get_currency_value1($id, $data['price']).'"}'; 

    } 

而且我設置好的了條件:

 elseif ($is_seasonal == 1 && $total_nights -1 < $seasonal_min_nights) { 
     echo '{"available":false,"total_price":"0","reason_message":"Minimum stay is ' . $data['min_nights_seasonal'] . ' nights for the following period: '.date('m/d/Y', $start_time).' - '.date('m/d/Y', $end_time).'"}'; 
     exit; 
    } 

而且只要我只有1個定製它工作正常範圍內,在數據庫中有2個條目。但是我所做的條件總是向我顯示添加到數據庫的最後一個信息,而不是適用於特定時間戳範圍的信息。

我將如何修改條件以符合時間戳並回顧min_nights foreach時間戳範圍?謝謝!

回答

0

我已經解決了它自己,循環時間戳和循環我設置好的了,我需要,然後應用到時間戳的每一單獨範圍的條件工作中的變量。如果有人有類似的情況:

獲取min_nights

$seasonal_min_nights = $seasonalprice_query->row()->min_nights; 

在一段時間循環:

  $start_time = $time['start_date']; 
      $end_time = $time['end_date']; 
      $i = $start_time; 
      while ($i <= $end_time) { 
       $start_date = date('m/d/Y', $i); 
       $s_date = explode('/', $start_date); 
       $s_date = $s_date[1] . $s_date[0] . $s_date[2]; 
       $seasonal_nights[$s_date] = $seasonal_min_nights; 
       $i = get_gmt_time(strtotime('+1 day', $i)); 
      } 

而對於循環:

  //Total Price 
      for ($i = 1; $i < $total_nights; $i++) { 
      $min_seasonal_nights = $seasonal_nights[$travel_dates[$i]]; 
      $is_seasonal = 1; 
     } 

最後statment:

 if ($is_seasonal == 1 && $total_nights - 1 < $min_seasonal_nights) { 
     echo '{"available":false,"total_price":"0","reason_message":"Minimum stay is ' . $data['min_seasonal_nights'] . ' nights for the following period: ' . date('m/d/Y', $data['s_start_date']) . ' - ' . date('m/d/Y', $data['s_end_date']) . '"}'; 
     exit; 
    } 

我會做編碼此的其他S型,但不得不與工作中存在的..所以希望它可以幫助別人:)