Symfony рассчитать количество дней на основе даты

Я пытаюсь рассчитать цену за количество дней от 1-21 на основе даты.

HomeController

$Sql = ' SELECT DISTINCT
a.property_id, a.date, a.minimum_stay,
a.maximum_stay,a.quantity,
a.arrival_allowed,a.departure_allowed,
p.duration, p.persons, p.amount,
p.extra_person_price, p.minimum_stay AS price_minimum_stay,
p.maximum_stay AS price_maximum_stay, p.weekdays,
p.period_till, p.period_from,
datediff(p.period_till, p.period_from) AS number_of_days
FROM availabilities AS a
JOIN prices AS p
ON a.property_id=p.property_id
WHERE a.minimum_stay >0
AND a.maximum_stay < 22
AND a.date >= p.period_from
AND a.date <= p.period_till
';
$Stm = $this->getEntityManager()->getConnection()->prepare($Sql);
$Stm->execute();
return $Stm->fetchAll(PDOConnection::FETCH_ASSOC);public function CalculatePrice($persons, $extra_person_price, $date, $amount, $duration, $period_till, $period_from)
{
//loop through persons
foreach ($persons as $person) {
//calculate price for persons
if ($person > 1) {
$amount += $person * $extra_person_price;
}
//array to link parameters with database fields
$tmp = array(
"date" => $date,
"person" => $person,
"price_person" => number_format($amount / 100, 2, '.', ',')
);
//loop through $tmp an add value from 2 to 21 to day an add this to $tmp array with calculated value
//$x=$number_of_days;
//$days = (strtotime($period_till) - strtotime($period_from)) / (60 * 60 * 24);

for ($x = 1; $x <= 21; ++$x) {
if ($x >1) {
$tmp["day$x"] = $tmp["day".($x-1)] + number_format($amount  / 100, 2, '.', ',');
//number_format(($amount * $x) / 100, 2, '.', ',');
} else {
$tmp["day$x"] = "0.00";
}

$price_per_person[] = $tmp;
}

return $price_per_person;
}

Я также рассчитываю цену за количество человек, но эта часть хороша. Прямо сейчас я сделал цикл for и сохранил числа от 1 до 21, чтобы узнать количество дней, которое я видел в цикле for. function CalculatePrice, Но эта часть не хорошо, мне нужно рассчитать это на основе даты. например:
Обычная цена для большинства дней составляет 123 евро. скажем, 3 сентября день стоил 250 евро, а 7 сентября — 300 евро. Допустим, человек хочет остаться на 5 дней, и он прибывает 3 сентября, поэтому расчет будет: 250 + 123 + 123 + 123 + 300 = 919 евро.
Но мне нужно, чтобы это было основано на дате. Я пытался с period_from и period_til, но пока не повезло. Может кто-нибудь привести пример или несколько полезных советов, как я могу сделать это в цикле for, как мой второй цикл for.

0

Решение

Я решил этот вопрос на основе теории, которую дал мне Абдельмалек. Я сделал массив и сохранил дату и цену каждой даты и пролистал. Ответ удален как-то не знаю как пометить как решенный

0

Другие решения

Ты можешь использовать date_diff как это:

First date = $leave->getLeaveFrom();

Second date = $leave->getLeaveTo();
$diff = date_diff($leave->getLeaveFrom(),$leave->getLeaveTo());

Results = var_dump($diff);
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector