如何在计算日期之间的差异后为每个日期分配价格? (date_diff)

时间:2012-03-29 10:23:54

标签: php datediff

我使用以下代码(基于此http://goo.gl/5HhSx)来计算日期之间的差异:

<?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天.March有固定价格(30€/天),4月有另一个(40€/天)。 有没有办法把整个价格加起来?三月到游行结束还有两天从四月开始?我该如何正确添加它们? 任何帮助,将不胜感激。感谢。

3 个答案:

答案 0 :(得分:0)

从日期中提取月份,如下所示:

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这样的开关案例添加。或者,您也可以在计算过程中使用聚合函数。

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

您当然可以推断出跨越多个月的时期的想法。

答案 2 :(得分:0)

实现目标结果的简要逻辑。

  1. 保留一系列月份价格表,
  2. 找出日期之间的月份差异。
  3. 在该月的循环中,取与该月的最后一天相比的日差,并乘以数组中的相应价格。
  4. 在循环内部将所有这些计算总和为总量变量。
  5. 参考mktime()和Date()函数