Итератор дня PHP

Я могу показать дни с текущей даты до следующих трех месяцев с помощью этого кода:

$begin = new DateTime(); $end = new DateTime(date('Ym-d', strtotime('+3 months', strtotime(date("dmY"))))); $interval = DateInterval::createFromDateString('1 day'); $days = new DatePeriod($begin, $interval, $end); foreach ( $days as $day ) { ... } 

Я чувствую, что код можно укоротить, особенно для $end . Не могли бы вы помочь?

О, я также хочу получить предыдущие 3 месяца. Я изменил '+3 months' на '-3 months' но не повезло. Есть идеи?

Для вашего первого вопроса вы можете напрямую писать

 $end = new DateTime('+3 months'); 

Чтобы вернуться назад 3 месяца, используйте 3 months ago вместо -3 months .

 $begin = new DateTime(); $end = new DateTime('+ 3 months'); $interval = DateInterval::createFromDateString('1 day'); $days = new DatePeriod($begin, $interval, $end); foreach ( $days as $day ) { var_dump($day); } $begin = new DateTime('- 3 months'); // '3 months ago' should also work $end = new DateTime(); $interval = DateInterval::createFromDateString('1 day'); $days = new DatePeriod($begin, $interval, $end); foreach ( $days as $day ) { var_dump($day); }