/** * Calculates the date of the Nth weekday of the month, * such as the second Saturday of January 2000. * * $occurance: 1=first, 2=second, 3=third, etc. * $day_of_week: 0=Sunday, 1=Monday, etc. * */ function get_n_week_day_of_month($occurance, $day_of_week, $date = null) { $this->_check_date(&$date); $year = $date->year; $month = $date->month; $DOW1day = ($occurance - 1) * 7 + 1; $d = date::create($year, $month, $DOW1day); $DOW1 = $d->get_day_of_week(); $wdate = ($occurance - 1) * 7 + 1 + (7 + $day_of_week - $DOW1) % 7; if ($wdate > $this->get_days_in_month($date)) { return null; } else { return date::create($year, $month, $wdate); } }