- time: documentation ( source)
<?php
$dow = 'saturday';
$step = 2;
$unit = 'W';
$start = new DateTime(time());
$end = clone $start;
$start->modify($dow); // Move to first occurence
$end->add(new DateInterval('P1Y')); // Move to 1 year from start
$interval = new DateInterval("P{$step}{$unit}");
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $date) {
echo $date->format('D, d M Y'), PHP_EOL;
}