0

我需要将 1 个季度添加到我的日期date("Y-m-d")

我有2018-03-05下个季度的约会,2018-04-012018-07-05 该怎么办?

编辑我已经使用了这个代码,但我有一点问题

while ($annee <= $annenow) {
            echo "$curMonth :: $annee   $annenow   <br>";
            if($curMonth<4)
                $curMonth=4;
            else if($curMonth<7)
                $curMonth=7;
            else if($curMonth<9)
                $curMonth=10;
            else if($curMonth<12)
                $curMonth=12;
            else
            {
                $curMonth=1;
                $anneedebut++;
            }
            
            $curQuarter = ceil($curMonth / 3);
            $annee = "$anneedebut$curQuarter";
            
        }

结果是:

09 :: 20183 20221
12 :: 20184 20221
1 :: 20191 20221
4 :: 20192 20221
7 :: 20193 20221
10 :: 20194 20221
12 :: 20194 20221
1 :: 20201 20221
4 :: 20202 20221
7 :: 20203 20221
10 :: 20204 20221
12 :: 20204 20221
1 :: 20211 20221
4 :: 20212 20221
7 :: 20213 20221
10 :: 20214 20221
12 :: 20214 20221
1 :: 20221 20221

我有quater 4重复两次?

但是我的代码非常大,如果存在的话,我会搜索到很少的代码

4

2 回答 2

2

从日期中取出月份,将其向上舍入到接下来的 3(一个季度中的月数)并加 1(因为我们正在使用基于 1 的系统)。

然后将新参数设置为下季度月的第一天

$date = new DateTimeImmutable("2018-03-05");

$month = (int) $date->format("m");
$nextQuarterMonth = ceil($month / 3) * 3 + 1;

$nextQuarter = $date->setDate($date->format("Y"), $nextQuarterMonth, 1);

echo $nextQuarter->format("Y-m-d");

如果您的原始日期在最后一个季度, PHPDateTime足够聪明,可以将第 13 个月视为明年的 1 月。

演示 ~ https://3v4l.org/fCWWQ

于 2022-01-24T02:58:59.043 回答
1
//Months rounded up to the next higher interval
function roundUpMonth(string $date, int $numberMonth = 3) : string
{
  $dt = date_create($date);
  $month = $dt->format('Y') * 12 + $dt->format('n');
  $month -= ($month-1)%$numberMonth - $numberMonth;
  return $dt->setDate(0,$month,1)->format('Y-m-d');
}

echo roundUpMonth("2018-03-05");  //2018-04-01
echo roundUpMonth("2018-02-05",1);  //2018-03-01
echo roundUpMonth("2018-05-07",2);  //2018-07-01
echo roundUpMonth("2018-07-05",6);  //2019-01-01
于 2022-01-25T13:04:11.013 回答