Привет у меня есть следующее 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
и т.д.
пожалуйста, проверьте
+3
динамической (например, 3*($i+1)
или похожей).
ДА. я забыл . это правда
Вы не меняете значение $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>";
Я бы рекомендовал использовать класс ДатаВремя, чтобы мы могли повторно использовать один и тот же экземпляр на каждой итерации.
$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
@abilasher - этот вопрос не по теме для SO.
Вы можете использовать метод класса PHP ДатаВремя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
)
Не могли бы вы рассказать, как я могу получить 6-месячный массив из этого 3-месячного $datesArr.
Вы хотите сказать, что вместо 3 месяцев должно быть 6 месяцев?
Да . Но из сгенерированного $datesArr
Ниже код для сложения или вычитания за год/месяц/день с даты
Дополнение = date('Y-m-d', strtotime("+0 лет +3 месяца +0 дней", strtotime($lastdate)));
Вычитание = дата('Г-м-д', 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
Почему бы не использовать карбон? carbon.nesbot.com ?