在循环PHP中将3个月添加到给定的日期

时间:2019-04-09 11:02:36

标签: php

嗨,我有以下date = 2015-06-01 00:00:00  所以我必须在此日期之前加上3个月,所以编写以下代码

 $sarting="2015-06-01 00:00:00";
  $date[$i]=date('Y-m-d', strtotime($sarting . "+3 months") );
  And i get the output = 2015-09-01;

但是现在我想一次又一次地添加3个月,共20次,我必须将输出存储到数组

所以我写了以下代码

 $store_date=array();
  for($i=0;$i<20;$i++){
     $store_date[$i]=date('Y-m-d', strtotime($sarting . "+3 months") );
  }

但是它会返回2015-09-01 20次。我需要这样的2015-09-01, 2015-12-01,2016-06-01等。

请检查

5 个答案:

答案 0 :(得分:5)

我建议使用DateTime类,以便我们可以在每次迭代中重用相同的实例。

$sarting    = "2015-06-01 00:00:00";
$store_date = [];

// Create a DateTime-object we can reuse
$date = new DateTime($sarting);

for ($i = 0; $i < 20; $i++) {
    $date->modify('+3 months');
    $store_date[] = $date->format('Y-m-d');
}

print_r($store_date);

由于我们要继续使用同一个对象,因此每次迭代都会增加3个月的时间。无需进行任何计算或任何其他操作,即可使代码清晰易读。

演示:https://3v4l.org/KZiH9

答案 1 :(得分:5)

您可以使用PHP的dateTime类的modify()方法向其中添加+3个月的循环时间。

<?php
$dateStamp = "2015-06-01 00:00:00";
$date = new DateTime($dateStamp);
$datesArr = [];
for ($i=1; $i<21 ; $i++) {
 $date->modify('+3 month');
 $datesArr[] = $date->format('Y-m-d h:i:s');
}
echo '<pre>';
print_r($datesArr);
echo '</pre>';

输出:

Array
(
    [0] => 2015-09-01 12:00:00
    [1] => 2015-12-01 12:00:00
    [2] => 2016-03-01 12:00:00
    [3] => 2016-06-01 12:00:00
    [4] => 2016-09-01 12:00:00
    [5] => 2016-12-01 12:00:00
    [6] => 2017-03-01 12:00:00
    [7] => 2017-06-01 12:00:00
    [8] => 2017-09-01 12:00:00
    [9] => 2017-12-01 12:00:00
    [10] => 2018-03-01 12:00:00
    [11] => 2018-06-01 12:00:00
    [12] => 2018-09-01 12:00:00
    [13] => 2018-12-01 12:00:00
    [14] => 2019-03-01 12:00:00
    [15] => 2019-06-01 12:00:00
    [16] => 2019-09-01 12:00:00
    [17] => 2019-12-01 12:00:00
    [18] => 2020-03-01 12:00:00
    [19] => 2020-06-01 12:00:00
)

Working Code:

答案 2 :(得分:4)

您没有更改$sarting的值。试试这个:

$sarting = "2015-06-01 00:00:00";
$store_date = array();
for ($i = 0; $i < 20; $i++) {
    $sarting = $store_date[$i] = date('Y-m-d', strtotime($sarting . "+3 months"));
}

答案 3 :(得分:2)

尝试此检查是否有帮助,

$sarting="2015-06-01 00:00:00";

$store_date=array();
  for($i=0;$i<20;$i++){
     $store_date[$i]=date('Y-m-d', strtotime($sarting . "+3 months") );
     $sarting=$store_date[$i];
  }

 echo "<pre>";
 print_r($store_date);
 echo "</pre>";

答案 4 :(得分:0)

以下用于从日期开始的年/月/日加减代码的代码

加法= date('Y-m-d',strtotime(“ + 0年+3个月+0天”,strtotime($ lastdate)));

减法= date('Y-m-d',strtotime(“ + 0年-3个月+0天”,strtotime($ lastdate)));

$lastdate = "01-12-2015"; //actual date

$after_3_month = date('Y-m-d', strtotime("+0 years +3 months +0 days", strtotime($lastdate))); // adding 3 month on the actual date

echo $after_3_month; //3 month added with actual date