$start_date = mktime(0, 0, 0, 1, 1, 2009);
$end_date = mktime(0, 0, 0, 10, 1, 2009);
$current_date = $start_date;
while($current_date <= $end_date) {
$current_date = strtotime("+1 month", $current_date);
}
Это один из способов сделать это. Еще одна включает две петли по месяцам и годам отдельно.
Но если вы хорошо знаете SQL, вы можете получить все свои метрики и GROUP BY EXTRACT(YEAR_MONTH FROM date)
прямо в БД, что, скорее всего, будет быстрее.