2013-07-18 4 views
0

Мой сайт будет зарезервировать шезлонги в день в отелях и парках. Обычно шезлонги стоят по умолчанию в день, но иногда есть пиковая скорость (например, праздничный сезон или выходные дни). Таким образом, у меня есть таблицаphp - расчет количества дней, которые имеют специальную цену

special_prices 
-------- 
start_date 
end_date 
price 

И у меня есть функция поиска/калькулятор, который позволяет пользователям вводить дату начала и дату окончания, когда они хотели бы нанять лежак и калькулятор выясняет цену, включая специальные тарифы.

У каждого лежака есть собственная запись, поэтому у меня есть все записи special_price, связанные с определенным lounger в массиве, и я решил, что я должен прокручивать каждую из этих записей, и если введенные пользователем дни выпадают между датами записи special_price то мне как-то нужно подсчитать, сколько дней нужно увеличить добавленную сумму.

У меня возникли проблемы с этим, поскольку я новичок в php и действительно просто делаю это для изучения. Я возился с ним слишком долго, хотя :(

ответ

0

Эта проблема обычно решается с помощью SQL Stored Procedures Но так как вы добавили на вопрос, как PHP, вот PHP ответ.

// Let's imagine that $db is a PDO instance 

// fetch all special prices 
$stmt = $db->query('SELECT * FROM `special_prices`;'); 
$specialPrices = $stmt->fetchAll(PDO::FETCH_ASSOC); 

// init datetime objects 
$startDate = new \DateTime('16.05.2013'); 
$endDate = new \DateTime('08.06.2013'); 
$currentDate = clone $startDate; 

// set default price and init result price (set it to 0) 
$defaultPrice = 10; 
$resultPrice = 0; 

while ($currentDate <= $endDate) 
{ 
    // init price the will be added to teh result as a default one 
    $addPrice = $defaultPrice; 

    foreach ($specialPrices as $specialPrice) 
    { 
     // temp special price DateTime objects to compare them with the current date 
     $specialPriceStartDate = new \DateTime($specialPrice['start_date']); 
     $specialPriceEndDate = new \DateTime($specialPrice['end_date']); 

     if ($currentDate >= $specialPriceStartDate && $currentDate <= $specialPriceEndDate) 
     { 
      // If one of special dates matches with the current date, set its price as $addPrice 
      $addPrice = $specialPrice['price']; 
      break; 
     } 
    } 

    // add price (default or special as calculated before) to the result 
    $resultPrice += $addPrice; 

    // get the next day 
    $currentDate->modify('+1 day'); 
} 

// here is the result 
echo $resultPrice; 
Смежные вопросы