Вы можете использовать strtotime , чтобы найти «следующую субботу» на основе даты начала. Если этой датой начала является день, предшествующий как можно более раннему (21-му) предшествующему дню, мы получаем ответ ...
//required year/month
$yyyymm="2009-01";
//find next saturday after earliest possible date
$t=strtotime("next saturday", strtotime("{$yyyymm}-21"));
//here you go!
echo "4th saturday of $yyyymm is ".strftime("%Y-%m-%d",$t)."\n";
Самое раннее 4-е повторение дня в любом месяце - 22-е (1,8,15,22), последнее возможное 4-е повторение - 28-е (7,14,21,28).
РЕДАКТИРОВАТЬ : Хотя это не ясно из документации, вы также можете запросить "четвертую субботу" - используйте нулевой день месяца в качестве основы:
$t=strtotime("fourth saturday", strtotime("{$yyyymm}-00"));
или опустите базовое время и укажите месяц и год напрямую:
$t=strtotime("fourth saturday feb 2009");
Наконечник шляпы Робину "Я не PHP-кодер" День, чтобы заметить, что:)