With reference to the Changelog above, 'recurrences' must be greater than 0 now.
This was not the case in PHP5 ( >= 5.3.0). A foreach loop over a DatePeriod with recurrences == 0 would
execute one time. A function could accept a $count parameter which represented the number of times to execute
the code in a foreach loop, and then initialize a DatePeriod with 'recurrences' == ($count-1) to get the desired
number of iterations.
The following example adds a special case for PHP7 and above to handle the situation where a single
iteration is desired.
Note that an alternative solution to subracting 1 from the desired count is to subtract one month from the desired starting month,
and then intialize the DatePeriod with the option DatePeriod::EXCLUDE_START_DATE.
<?php
function displayCalendar($tp)
{
$format = "F, Y";
echo "Display Calendar for " . $tp->format($format) . "\n";
}
function showMonths($date = false, $count = 1)
{
$format = "Y-m-d 00:00:00";
$init = ($date ? $date : date($format));
$one_month = new DateInterval("P1M");
$start = new DateTime($init);
echo "Show $count month" . ($count > 1 ? "s" : "") . "\n";
if ($count == 1 && (substr(phpversion(), 0, 1) >= 7) )
{
displayCalendar($start);
}
else
{
$time_period = new DatePeriod($start, $one_month, ($count-1));
foreach ($time_period as $tp)
{
displayCalendar($tp);
}
}
echo "\n";
}
$first_month = "2021-11";
showMonths($first_month);
$first_month = "2021-01";
showMonths($first_month, 12);
?>
The above example will output:
Show 1 month
Display Calendar for November, 2021
Show 12 months
Display Calendar for January, 2021
Display Calendar for February, 2021
Display Calendar for March, 2021
Display Calendar for April, 2021
Display Calendar for May, 2021
Display Calendar for June, 2021
Display Calendar for July, 2021
Display Calendar for August, 2021
Display Calendar for September, 2021
Display Calendar for October, 2021
Display Calendar for November, 2021
Display Calendar for December, 2021