【问题标题】:PHP for / while loop - Calculate dates based on starting date and intervalPHP for / while 循环 - 根据开始日期和间隔计算日期
【发布时间】:2017-06-20 03:03:06
【问题描述】:

我的数据库中有两个字段,一个start_date 和一个interval。根据这些值,我想计算其他日期。例如:

为简单起见,start_date 是 1 月 1 日。间隔为 3。这意味着每次日期月份应递增 3。最终结果应为:

01-01 // 1st of january
01-04 // 1st of april
01-07 // 1st of july
01-10 // 1st of october

另一个例子。 start_date 是 5 月 3 日。间隔为 6。最终结果应该是:

03-05 // 3rd of may
03-11 // 3rd of november

我尝试过这样的事情:

$interval = 3;

    for ($i = 1; $i <= 12; $i += $interval)
    {
        echo $start_date->addMonths($i)->format('m-d'); // I'm using carbon
    }

但结果是:

02-01
05-01
08-01
11-01

它首先从$i = 1 中添加1,然后开始实际循环,每次添加3。我不确定我应该为$i = 1 使用什么,或者这是否可以通过 for 循环来完成。有什么建议吗?

PS。开始日期可以是任何时间,间隔可以是 1 到 12 之间的任何时间。

【问题讨论】:

  • 您的时间间隔不起作用。从一月到三月,有两个月的差异。但从 3 月到 6 月,从 6 月到 9 月,有 3 个月。
  • 这只是我发布的一个例子,我做错了。
  • 怎么了?我的代码?是的,这就是我在这里发帖的原因..
  • 对不起,我错了,不是你。

标签: php for-loop while-loop


【解决方案1】:

这样修复它:

    for ($i = $interval; $i <= 12; $i += $interval)
    {
        echo $start_date->addMonths($i);
    }

【讨论】:

    【解决方案2】:

    试试这个:

    $start_date = strtotime("2017-05-03");
    $interval = 6;
    for ($i = 0; $i <= 12; $i += $interval) {
       echo nl2br(date("Y-m-d", strtotime("+" . $i . " month", $start_date)) . "\n");
    }
    

    输出:

    2017-05-03
    2017-11-03
    2018-05-03
    

    【讨论】:

    • 比我的解决方案更好:) Thnx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多