Проблема с датами в php

#php #html #date

#php #HTML #Дата

Вопрос:

Я хочу печатать дату каждые три месяца до истечения одного года, начиная с даты, выбранной пользователем, но когда я сделал приращение, цикл прерывается и печатается только первая дата, помогите мне, пожалуйста

это мой код на PHP

 $fecha = date('m/d/Y',strtotime($_POST['fecha']));
printf( date('d/m/Y',strtotime($fecha)).'----');
$fin = date('m/d/Y',strtotime($fecha."  1 year"));
printf(date('d/m/Y',strtotime($fin)).'----');
if($fecha<$fin){
    $fecha = date('m/d/Y',strtotime($fecha."  1 month"));
    printf( date('d/m/Y',strtotime($fecha)));
}
<form method="POST" action="./fechas.php">
<input type="date" name="fecha" id="fecha">
<input type="submit" value="enviar">
</form>
  

Это вывод:

введите описание изображения здесь

И я хочу напечатать это:

15/10/2020—-
15/11/2020—-
15/12/2020—

Комментарии:

1. Вы хотите печатать дату за последние 3 месяца каждого года? Если пользователь может выбрать дату, которая не будет работать, потому что, скажем, они начинаются 31 октября, в ноябре всего 30 дней.

2. нет, я хочу печатать этот конкретный день каждые X месяцев, например, если я выберу 15 сентября 2020 года, я хочу напечатать: 15 декабря 2020 года, 15 марта 2020 года, 15 июня 2020 года и, наконец, 15 сентября 2020 года.

Ответ №1:

Вы постоянно переформатируете и повторно обрабатываете даты и интервалы с помощью самых ненадежных функций, когда есть целая библиотека DateTime, которая упрощает вашу жизнь.

 $input = new DateTime('2020-09-24', new DatetimeZone('UTC'));
$past = (clone $input)->sub(new DateInterval('P1Y'));
$period = new DateInterval('P3M');

$cur = clone $past;
do {
    echo $cur->format('Y-m-d') . "n";
    $cur->add($period);
} while( $cur <= $input );
  

Вывод:

 2019-09-24
2019-12-24
2020-03-24
2020-06-24
2020-09-24