2016-05-02 3 views
0

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

Table Orders

Table Cars

Цена определяется по формуле:

SELECT ROUND((points * (SELECT DATEDIFF('$dateTo', '$dateFrom'))) * 0.95) AS price 

$dateTo и $dateFrom являются PHP переменные, которые хранит значение заданного диапазона дат пользователем. В других словах:

$dateTo = $_POST['date-to']; 
$dateFrom = $_POST['date-from']; 

Так за каждый день вы получаете 5% от от стоимости аренды, но я также хочу, чтобы проверить, если диапазон дат проходит по субботу или в воскресенье. Если аренда с пятницы по понедельник, я хочу добавить дополнительные 10 баллов к общей цене, потому что диапазон дат включает субботу.

Возможно ли это?

+0

Я немного запутался, о том, что вы имеете в виду «* Если арендная с пятницы до понедельника, я хотите добавить дополнительные 10 баллов к общей цене, потому что диапазон дат включает субботу * ». Почему до понедельника, а не до воскресенья? Что, если они арендуют его в пятницу на 1 день? Что, если они сдадут аренду в субботу и вернут ее на следующий день? – Mike

+0

@Mike - им просто нужен запрос или код, который может принимать диапазон дат и определять, выпадает ли выходной день в этот диапазон. Если это произойдет, им нужно добавить 10 к цене. В этой ситуации они приводят конкретный пример. Проблема заключается в том, что «добавить 10 к цене» является слишком общим, по крайней мере для меня. Вы хотите, чтобы запись в базе данных изменилась, чтобы вам было нужно обновление? Вы хотите только то, что отображается, чтобы быть измененным? Что на самом деле влияет на это изменение? – Dresden

+0

@MikeS Вы можете быть правы, но это не похоже на конкретный пример для меня. – Mike

ответ

0

Вы можете использовать хранимую процедуру для этой цели, где ваш запрос может быть вложен внутри цикла, чтобы проверить, является ли он рабочим днем ​​или нет. В качестве альтернативы, Вы можете проверить, если диапазон дат имеет Weekend в нем, используя PHP как так:

<?php 

    /** 
    * FUNCTION THAT CHECKS IF A WEEKEND EXISTS BETWEEN 2 GIVEN DATES 
    * @param string $startDate 
    * @param string $endDate 
    * @return boolean 
    */ 
    function dateRangeContainsWeekend($startDate, $endDate) { 
     $tsDate = strtotime($startDate); 
     $diff = date_diff(date_create($startDate), date_create($endDate)); 
     $dDiff = $diff->days; 

     if ($dDiff > 0) { 
      for ($i = 0; $i < $dDiff; $i++) { 
       $timeDiff = 24 * 60 * 60 * $i; 
       $sDate  = $tsDate + $timeDiff; 
       $weekDay = date('w', $sDate); 

       if (($weekDay == 0 || $weekDay == 6)) { 
        return ($weekDay == 0 || $weekDay == 6); 
       } 
      } 
     } 
     return false; 
    } 

    // TESTS - - - - 
    $d1 = "2016-05-02"; 
    $d2 = "2016-05-10"; 
    var_dump(dateRangeContainsWeekend($d1, $d2)); // DUMPS true 

    // NOW; IF YOU KNOW THAT THE GIVEN DATES CONTAIN A WEEKEND, 
    // YOU MAY MODIFY YOUR QUERY TO REFLECT YOUR DESIRES 
    $factor = "0.95"; //CHOOSE YOUR FACTOR HERE... 
    $sql = "SELECT ROUND((points * (SELECT DATEDIFF('$dateTo', '$dateFrom'))) * $factor) AS price"; 
Смежные вопросы