计算季节价格

时间:2016-11-16 19:00:52

标签: php

我想计算季节价格。 季节的开始和结束日期应该是本月的最后一个星期六'而不是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年。

如何以正确的方式编程?

0 个答案:

没有答案