我想在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发布于 2022-01-19 11:16:17
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
// )发布于 2022-01-19 11:15:00
您的主要问题是"$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可能不是这方面的最佳选择。我想您最终想要使用的是DateTime、DateInterval和DatePeriod的组合。
https://stackoverflow.com/questions/70769187
复制相似问题