Personally, I would like to work with DateTime objects and use DateInterval .
In the above case, you need to determine the date of the first / next Saturday, and then just work with the P2W date interval
Basic example
$dow = 'saturday'; $step = 2; $unit = 'W'; $start = new DateTime('2012-06-02'); $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; } /* Sat, 02 Jun 2012 Sat, 16 Jun 2012 Sat, 30 Jun 2012 Sat, 14 Jul 2012 โฆ Sat, 20 Apr 2013 Sat, 04 May 2013 Sat, 18 May 2013 Sat, 01 Jun 2013 */
source share