работаю над периодичностью в календаре, с ежедневно или еженедельно проблем нет, но когда хочу использовать P1M или P1Y то из за того что нет в календаре есть дни от 28 до 31 происходит смещение и я не совсем понимаю как это обойти вот мой код Код (Text): $from = new \DateTime('2022-01-31 10:00:00'); $to = new \DateTime('2024-02-31 10:00:00'); $period = new \DatePeriod($from, new \DateInterval('P1M'), $to); $arrayOfDates = array_map( function ($item) { return $item->format('Y-m-d H:i:s'); }, iterator_to_array($period) ); вывод array:25 [ 0 => "2022-01-31 10:00:00" 1 => "2022-03-03 10:00:00" 2 => "2022-04-03 10:00:00" 3 => "2022-05-03 10:00:00" 4 => "2022-06-03 10:00:00" 5 => "2022-07-03 10:00:00" 6 => "2022-08-03 10:00:00" 7 => "2022-09-03 10:00:00" 8 => "2022-10-03 10:00:00" 9 => "2022-11-03 10:00:00" 10 => "2022-12-03 10:00:00" 11 => "2023-01-03 10:00:00" 12 => "2023-02-03 10:00:00" 13 => "2023-03-03 10:00:00" 14 => "2023-04-03 10:00:00" 15 => "2023-05-03 10:00:00" 16 => "2023-06-03 10:00:00" 17 => "2023-07-03 10:00:00" 18 => "2023-08-03 10:00:00" 19 => "2023-09-03 10:00:00" 20 => "2023-10-03 10:00:00" 21 => "2023-11-03 10:00:00" 22 => "2023-12-03 10:00:00" 23 => "2024-01-03 10:00:00" 24 => "2024-02-03 10:00:00" ] зачем то в феврале из за того что то 28 то 29 сбивает порядок добавление одного месяца и получаю такой массив, а хотелось бы только те месяца в котором есть 31число проблемы только датами 28,29,30,31 в остальном меня все устраивает. я новичек в php, помогите кто в этом шарит хорошо)
"зачем-то" — очевидно затем что месяц февраль нерезиновый? чтобы после февраля следующие месяцы не отсчитывались от вынужденной даты, всякий раз прибавляй интервал к исходной дате, т.е. x +1 месяц, x + 2 месяца и т.д. --- Добавлено --- тогда последовательность будет типа 2022-01-31 10:00:00 2022-03-31 10:00:00 2022-05-01 10:00:00 2022-05-31 10:00:00 2022-07-01 10:00:00 ...
@brevis хорошая ссылка. но это не решение проблемы, точнее это возможно решение побочной проблемы, а не основной. есть непреодолимое обстоятельство — февраль короткий месяц ))) мы можем получить очередной скорректированный результат или 28е число (иногда 29е) или какой-то день в марте. выбор за заказчиком. главная беда это что скорректированная дата у автора темы портит все последующие вычисления. это решается алгоритмически, через вычисленияе всех дат от исходной даты, а не от предыдущей вычисленной.
Вроде как боле менее разобрался, можете подсказать функцию которая в зависимости от даты узнает кол. дней в след месяце, пробовал много процедур но все оказались не рабочими
https://www.php.net/manual/en/function.cal-days-in-month.php --- Добавлено --- разница между датами https://www.php.net/manual/en/datetime.diff.php здесь есть масса примеров, после чтения которых, у тебя могут возникнуть идеи как вычислить то или это.