Приведенный ниже код рассчитывает первый вторник данной комбинации месяца / года. Он написан на MacRuby , потому что это то, с чем я только что попробовал, но у вас не должно быть проблем с преобразованием его в надлежащий Objective-C, это просто другой синтаксис (я люблю MacRuby за быстрое воплощение идеи ):
dc = NSDateComponents.alloc.init
# Set month to April 2010
dc.setYear 2010
dc.setMonth 4
dc.setWeekday 3 # 1 = Sunday, 2 = Monday, ...
dc.setWeekdayOrdinal 1 # We want the first weekday of the month
cal = NSCalendar.alloc.initWithCalendarIdentifier NSGregorianCalendar
date = cal.dateFromComponents dc
date.description # => "2010-04-06 00:00:00 +0200"
Я оставляю вам право определять «следующий первый вторник» по заданной дате: сначала сделайте расчет для месяца текущей даты, а если результат в прошлом, сделайте это снова для следующего месяца. Используйте -[NSCalendar components:fromDate:]
, чтобы получить комбинацию месяц / день для данной NSDate.