php - 在循环PHP中添加3个月到给定日期

嗨,我有以下 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 等。

请检查

时间:

您可以使用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


)



工作代码:

我建议使用DateTime -class,这样我们就可以在每次迭代时重用相同的实例。


$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

你没有更改 $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"));


}



如果有帮助的话试试这个


$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>";



...