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


How to assign price to each date after calculating difference between dates? (date_diff)

我正在使用以下代码(基于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天。三月有固定价格(30欧元/天),四月有另一个价格(40欧元/日)。有没有办法把整个价格加起来?离三月底还有三天,离四月还有两天?如何正确添加它们?如有任何帮助,我们将不胜感激。谢谢

对于您的确切示例,这是有效的:

$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);

当然,你可以将这个想法外推到跨越几个月的时期。

提取日期之外的月份,如下所示:

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

对于"2012-03-29"answers"2012-04-02"之间的每个日期,然后相应地更新表格。在这种情况下,您希望将总和相加,然后使用存储过程-声明初始化为零的变量"sum",并使用开关情况(如:CASE '04' then sum+=30 , CASE '03' then sum+=20)进行相加。或者,您也可以在计算过程中使用聚合函数。

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

  1. 保留一系列月份的价目表
  2. 找出日期之间的月份差
  3. 在该月的循环中,取该月最后一天的日差,并乘以数组中相应的价格
  4. 在循环中,将所有这些计算相加为一个总量变量

请参阅mktime()和Date()函数