第n○曜日の日付を求める

By | 2019/09/19

例) 2019-08 の第3木曜日を求める。該当する日付が無ければfalseを返す

$target = '2019-08-05';
print getWeekWdayDate($target, 3, 4);

function getWeekWdayDate($target, $week, $wday) {
        list($y, $m, $d) = explode('-', $target);
        // 対象月1日の曜日
        $day1wday = date('w', mktime(0, 0, 0, $m, 1, $y));
        // 対象月の第n曜日を計算
        $day = 7 * ($week - ($wday < $day1wday ? 0 : 1)) + 1 - $day1wday + $wday;
        // 月末日と比較
        $lastday = date('d', mktime(0, 0, 0, $m+1, 0, $y));
        if ($day > $lastday) {
            return false;
        } else {
            return date('Y-m-d', mktime(0, 0, 0, $m, $day, $y));
        }
}