3个月日期间隔循环

3 Months date Interval Looping

我想以 3 个月为间隔循环月份,请参见下面的代码:

for($i=1; $i<=3; $i++){
$date=date('d-m-Y',strtotime("$i*3 month"));
echo "$date"."<br>";
}

但得到以下结果:

01-01-1970
01-01-1970
01-01-1970

我想达到以下结果:

19-03-2022
19-06-2022
19-09-2022

您的主要问题是 "$i*3 month" 不会进行计算 *3,因此计算结果为 "1*3 month"strtotime 无法理解。为了解决这个问题,您必须先进行计算,然后进行连接(而不是直接插值),例如:

for($i = 1; $i <= 3; $i++){
    $date=date('d-m-Y',strtotime($i * 3 . " month"));
    echo "$date"."<br>";
}

你可以加强这个,事实上 strtotime 有第二个参数允许你指定一个基本时间戳:

for($i = 0; $i < 3; $i++){
    $date=date('d-m-Y',strtotime($i * 3 . " month", strtotime('2022-03-19')));
    echo "$date"."<br>";
}

strtotime 可能不是最好的选择。我猜你最终想要使用的是 DateTimeDateInterval 和 [=32] 的组合=]DatePeriod

function generateDates(string $startDate, int $count): array {
 $date = new DateTime($startDate);
 $dates = [ $date->format('d-m-Y') ];
  for ($i = 0; $i < $count - 1; $i++) {
    $dateTime = $date->add(new DateInterval('P3M'));
    $dates[] = $dateTime->format('d-m-Y');
  }
  return $dates;
}

$result = generateDates('2022-03-19', 8);

print_r($result);   // This will print:

// Array
// (
//     [0] => 19-03-2022
//     [1] => 19-06-2022
//     [2] => 19-09-2022
//     [3] => 19-12-2022
//     [4] => 19-03-2023
//     [5] => 19-06-2023
//     [6] => 19-09-2023
//     [7] => 19-12-2023
// )