#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