【问题标题】:3 Months date Interval Looping3个月日期间隔循环
【发布时间】:2022-01-19 19:39:03
【问题描述】:

我想以 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

【问题讨论】:

    标签: php loops date intervals


    【解决方案1】:
    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
    // )
    

    【讨论】:

    • 感谢@Lukas.j 提供帮助,当我运行您提供的代码时,我注意到第三行没有遵循顺序。请再看一遍@它 plz
    • @vascoder:我在几分钟前更改了代码,因为我也看到了。所以请用当前代码再试一次。
    • 非常感谢@lukas.j。完美地工作......我非常感谢。
    【解决方案2】:

    您的主要问题是 "$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 可能不是最好的选择。我猜你最终想要使用的是DateTimeDateIntervalDatePeriod 的组合

    【讨论】:

    • 感谢@homer,这很有帮助。我很感激
    猜你喜欢
    • 2021-07-21
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 2020-09-26
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多