我想计算季节价格。 季节的开始和结束日期应该是本月的最后一个星期六'而不是2016-31-12'
对我来说唯一的问题是,我不知道如何循环通过称为“期间”的阵列。当有一个以不同年份号码预订的时段时。 要清理一下,本月的最后一个星期六'明年的变化。
示例:
$beginseason1 = new DateTime('December');
$beginseason1->modify('last saturday of this month');
我的代码:
<?php
// declare season dates
$startdate = new DateTime('2016-12-31');
$enddate = new DateTime('2018-04-30');
$beginseason1 = new DateTime('2016-01-01');
$endseason1 = new DateTime('2016-03-30');
$beginseason2 = new DateTime('2016-03-31');
$endseason2 = new DateTime('2016-04-30');
$beginseason3 = new DateTime('2016-05-01');
$endseason3 = new DateTime('2016-12-31');
// get period of booked dates and put them in a array
$period = new DatePeriod(
new DateTime($startdate->format('Y-m-d')),
new DateInterval('P1D'),
new DateTime($enddate->format('Y-m-d'))
);
//declare variables below
$price = 0;
$daysinseason1 = 0;
$daysinseason2 = 0;
$daysinseason3 = 0;
// loop trough array and check every date with season prices
foreach($period as $date)
{
if($date->format('m-d') >= $beginseason1->format('m-d') && $date- >format('m-d') <= $endseason1->format('m-d')){
echo $date->format('m-d') . "<br/>";
$price = $price + 25;
$daysinseason1++;
}
if($date->format('m-d') >= $beginseason2->format('m-d') && $date->format('m-d') <= $endseason2->format('m-d')){
echo $date->format('m-d') . "<br/>";
$price = $price + 25;
$daysinseason2++;
}
if($date->format('m-d') >= $beginseason3->format('m-d') && $date->format('m-d') <= $endseason3->format('m-d')){
echo $date->format('m-d') . "<br/>";
$price = $price + 25;
$daysinseason3++;
}
}
echo "season 1: " . $daysinseason1 . "<br/>";
echo "season 2: " . $daysinseason2 . "<br/>";
echo "season 3: " . $daysinseason3 . "<br/>";
?>
我的代码可以解决这个问题,但如果年份是2016年或2018年,则无关紧要的问题31-12始终是12月的最后一个星期六。 第一季的开始发生在2016年,但结束于2017年。
如何以正确的方式编程?