首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >3个月日期间隔循环

3个月日期间隔循环
EN

Stack Overflow用户
提问于 2022-01-19 10:44:21
回答 2查看 92关注 0票数 0

我想在3个月间隔内循环一个月,请参阅下面的代码:

代码语言:javascript
复制
for($i=1; $i<=3; $i++){
$date=date('d-m-Y',strtotime("$i*3 month"));
echo "$date"."<br>";
}

但我得到的结果如下:

代码语言:javascript
复制
01-01-1970
01-01-1970
01-01-1970

我希望取得以下成果:

代码语言:javascript
复制
19-03-2022
19-06-2022
19-09-2022
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-19 11:16:17

代码语言:javascript
复制
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
// )
票数 0
EN

Stack Overflow用户

发布于 2022-01-19 11:15:00

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

代码语言:javascript
复制
for($i = 1; $i <= 3; $i++){
    $date=date('d-m-Y',strtotime($i * 3 . " month"));
    echo "$date"."<br>";
}

您可以增强这一点,实际上,strtotime有第二个参数,允许您指定一个基本时间戳:

代码语言:javascript
复制
for($i = 0; $i < 3; $i++){
    $date=date('d-m-Y',strtotime($i * 3 . " month", strtotime('2022-03-19')));
    echo "$date"."<br>";
}

strtotime可能不是这方面的最佳选择。我想您最终想要使用的是DateTimeDateIntervalDatePeriod的组合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70769187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档