すべてをカバーしていることがわかるまで、一度に7日間戻って、前の金曜日の数を数える必要があります。
ループは常に最初の金曜日を超えて、月の最初の日ではない金曜日の通常のケースをカバーします。金曜日が月の最初の日である場合は、オーバーシュートを考慮して増分を減らす必要があります。
$currentDate = time(); // e.g.
$dayOfMonth = date('j', $currentDate);
$ym = date('Y-m', $currentDate);
$firstFriday = strtotime("Friday ".$ym);
$dateOfFirstFriday = date('j', $firstFriday);
// we need to reduce count by 1 if friday is the 1st, to compensate
// for overshooting by a week due to the >= in the while loop
$weekCount = ($dateOfFirstFriday == 1) ? -1 : 0;
while ($dayOfMonth >= $dateOfFirstFriday) {
$weekCount ++;
$dayOfMonth = $dayOfMonth - 7;
}
var_dump($weekCount);
このコードは、たとえば金曜日の30日であるかどうかを考慮していませんが、実際には翌月の第0週にいますか?それが必要な場合は、ポストを開くことからは明確ではありません。