2012-03-29 1 views
0

Я использую следующий код (на основе этого http://goo.gl/5HhSx) вычислить разницу между датами:Как назначить цену каждой дате после расчета разницы между датами? (Date_diff)

<?php 
$date1 = '2012-03-29'; 
$date2 = '2012-04-02'; 
$datetime1 = date_create($date1); 
$datetime2 = date_create($date2); 
$interval = date_diff($datetime1, $datetime2); 
echo $interval->format('%a days'); 
?> 

Разница состоит в 4 days.March имеет фиксированную цену (30 €/день) и апрель имеет еще (40 €/день). Есть ли способ суммировать всю цену? Три дня до конца марша и еще два с апреля? Как я могу добавить их правильно? Любая помощь будет оценена по достоинству. Благодарю.

ответ

0

Для вашего точного примера это работает:

$date1 = '2012-03-29'; 
$dateBoundary = substr($date1, 0, 8).date('t', strtotime($date1)); 
$date2 = '2012-04-02'; 
$marchPrice = 30; 
$aprilPrice = 40; 
$datetime1 = date_create($date1); 
$datetime1Boundary = date_create($dateBoundary); 
$datetime2 = date_create($date2); 
$interval1 = date_diff($datetime1, $datetime1Boundary); 
$interval2 = date_diff($datetime1Boundary, $datetime2); 
$totalPrice = ($interval1->format('%d') * $marchPrice) + ($interval2->format('%d') * $aprilPrice); 
echo number_format($totalPrice, 2); 

Вы можете, конечно, экстраполировать идею для периодов, которые охватывают несколько месяцев.

+0

Да это работает, как ожидалось. Итак, что происходит, если один месяц делится на два периода. Например, 1 марта до 15-го - 20 евро, а с 16-го до конца месяца - 30 евро. Должен ли я использовать случаи (перерыв)? –

+0

Вы можете просто установить границу как средний месяц и при необходимости изменить множители цены. – Ing

+0

Итак, как мне изменить границу, чтобы разделить месяц на два периода? –

0

Extract месяц из даты, как это:

SELECT MONTH('8/14/04') as "Month"; 

для каждой даты между «2012-03-29» и «2012-04-02», а затем обновить таблицу соответственно. В случае, если вы хотите добавить сумму, используйте хранимую процедуру -declare переменную 'sum', интериализованную на ноль, и добавьте с помощью таких случаев: CASE '04' then sum+=30 , CASE '03' then sum+=20. Или же вы можете использовать агрегатную функцию в своей процедуре для вычисления.

0

Краткая логика достижения целевого результата.

  1. Держите массив прайс-лист на несколько месяцев,
  2. найти разницу месяцев между датами.
  3. В цикле в течение месяца учитывайте дневную разницу с последним днем ​​за этот месяц и умножайтесь на соответствующую цену из массива.
  4. Внутри цикла суммируйте все эти вычисления в общую сумму.

Направить указываете ей() и Date() функции