php - 计算有特殊价格的天数

时间:2013-07-18 12:11:33

标签: php mysql datetime

我的网站将用于每天在酒店和公园预订日光躺椅。通常,躺椅每天的默认价格,但有时会有一个高峰率(例如假日季节或周末)。所以我有一张桌子

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

我有一个搜索/计算器功能,允许用户输入他们想租用躺椅的开始日期和结束日期,计算器计算总价格,包括特价。

每个躺椅都有它自己的记录,所以我将所有的special_price记录与一个阵列中的特定躺椅相关联,我想我应该遍历每个记录,如果用户输入的天数介于special_price记录的日期之间那么我不知何故需要计算需要增加多少天数。

我很难解决这个问题,因为我是php的新手,并且真的只是为了学习体验而这样做。我现在已经摆弄了太长时间了:(

1 个答案:

答案 0 :(得分: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;