【问题标题】:Add 1 month to dates in for loop in PHP在 PHP 的 for 循环中为日期添加 1 个月
【发布时间】:2016-01-02 22:49:23
【问题描述】:

我想为 for 循环的每次迭代添加 1 个月的到期日期。下面是我的代码。

$qt = 3;
$sales_due_date = 2015-09-21;

for($i=0;$i<$qt;$i++){

    $time = date('Y-m-d', strtotime('+1 month', strtotime($sales_due_date)));

    $due_dates[] = $time;
}

结果是

Array ( [0] => 2015-10-21 [1] => 2015-10-21 [2] => 2015-11-21) 

我希望结果如下所示

Array ( [0] => 2015-09-21 [1] => 2015-10-21 [2] => 2015-11-21) 

【问题讨论】:

  • 然后用$i代替硬编码+1用+$i月

标签: php for-loop


【解决方案1】:

这应该会产生预期的结果

$qt = 3;
$sales_due_date = "2015-09-21";

for ($i = 0; $i < $qt; $i++) 
{
    $due_dates[] = $sales_due_date;
    $time = date('Y-m-d', strtotime('+1 month', strtotime($sales_due_date)));
    $sales_due_date = $time;
}

output

Array
(
    [0] => 2015-09-21
    [1] => 2015-10-21
    [2] => 2015-11-21
)

【讨论】:

  • 这将不包括输出中的第一个月。
  • 它将包括,我检查过。我会更新输出。
  • $due_dates[] = $sales_due_date; 会的。
【解决方案2】:

您的代码不会更新 $sales_due_date,因此它将始终返回相同的值。另外,如果你想要起始值,你需要稍微改变一下逻辑。也许这可能对您更有效:

$qt = 3;
$sales_due_date = "2015-09-21";
// create a time stamp of the date
$time = strtotime($sales_due_date);
for($i=0;$i<$qt;$i++){
    // convert timestamp back to date string
    $date = date('Y-m-d', $time);
    $due_dates[] = $date;
    // move to next timestamp
    $time = strtotime('+1 month', $time)
 }

【讨论】:

    【解决方案3】:

    试试这个

    $qt = 3;
    $sales_due_date = 2015-09-21;
    $time="";
    for($i=0;$i<$qt;$i++){
    
        if($time == "")
        {
        $time = date('Y-m-d', strtotime('+1 month', strtotime($sales_due_date)));
        }
        else{
        $time = date('Y-m-d', strtotime('+1 month', strtotime($time)));        
        }
    
        $due_dates[] = $time;
    }
    

    【讨论】:

    • 参考我下面的回答,您应该在 $sales_due_date 的值周围加上引号。此外,此版本不包括第一个月 - 但可以通过更改第一个 if() 条件来解决
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    相关资源
    最近更新 更多