Различная цена в будние и выходные дни

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

Заказы Таблицы

Таблица Автомобили

Цена указана:

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

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

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

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

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

1 ответ

  1. Для этой цели можно использовать хранимую процедуру, в которой запрос может быть вложен в цикл, чтобы проверить, является ли он рабочим днем или нет.
    Кроме того, вы можете проверить, есть ли в диапазоне дат выходные дни, используя 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";