Добавить 3 месяца к указанной дате в цикле 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 и т.д.

пожалуйста, проверьте

Почему бы не использовать карбон? carbon.nesbot.com ?

Arda 09.04.2019 13:10
«Но дело в том, что это возвращается 2015-09-01 20 раз» — конечно, потому что вы добавляете 3 месяца к одной и той же начальной дате в каждой итерации цикла. Вам либо нужно изменить $sarting, либо вы просто делаете часть +3 динамической (например, 3*($i+1) или похожей).
04FS 09.04.2019 13:12

ДА. я забыл . это правда

Abilash Erikson 09.04.2019 14:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
1 291
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы не меняете значение $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.

M. Eriksson 09.04.2019 15:50
Ответ принят как подходящий

Вы можете использовать метод класса 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.

Abilash Erikson 09.04.2019 14:27

Вы хотите сказать, что вместо 3 месяцев должно быть 6 месяцев?

Pupil 09.04.2019 14:27

Да . Но из сгенерированного $datesArr

Abilash Erikson 09.04.2019 14:34

Ниже код для сложения или вычитания за год/месяц/день с даты

Дополнение = 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

Другие вопросы по теме