app/classes/ReleaseInsights/CalendarMonthly.php (27 lines of code) (raw):
<?php
declare(strict_types=1);
namespace ReleaseInsights;
use DateInterval, DatePeriod, DateTime;
class CalendarMonthly
{
/**
* Utility function to get a list of months between now
* and our next planned release.
* This is used for the monthly calendar view.
* @return array<string>
*/
public static function getMonthsToLastPlannedRelease(): array
{
$start = new DateTime('now')->modify('first day of this month');
/* For unit tests which work on stale data, we fake a past date */
if (defined('TESTING_CONTEXT')) {
$start = new DateTime('2023-11-01');
}
/* The end date is the last planned major release */
$end = array_key_last(new Data()->getFutureReleases());
$end = new Data()->getFutureReleases()[$end];
$end = new DateTime($end)->modify('first day of next month');
$period = new DatePeriod(
$start,
DateInterval::createFromDateString('1 month'),
$end
);
$upcoming_months = [];
foreach ($period as $month) {
$upcoming_months[] = $month->format("Y-m-d");
}
return $upcoming_months;
}
}