截止到下个季度的日期

Round date up to next quarter

我需要在我的约会中增加 1 个季度 date("Y-m-d")

我有日期 2018-03-05 下个季度 2018-04-01 不是 2018-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 repeate 两次?

但是我的代码非常大,如果存在我正在寻找小代码

从日期中取出月份,将其四舍五入到下一个 3(一个季度的月数)并加 1(因为我们使用的是基于 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");

PHP 的 DateTime 足够聪明,如果您的原始日期是在最后一个季度,则将第 13 个月视为下一年的一月。

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

//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