Учитывая исходную дату, мне нужно найти следующее: «Среда».
Просто для ясности: если эталонная дата, скажем, вторник, то она должна возвращать среду из той же недели.
Если эталонной датой является среда или более поздняя дата, необходимо вернуть следующую среду с следующей недели.
Важно, чтобы он не возвращал среду после контрольной даты.
Я рассматривал возможность использования NSDateComponents
, но не знаю, как получить следующий день недели, который всегда должен быть в будущем.
Это то, что у меня есть до сих пор:
NSDate *referenceDate = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:referenceDate];
[dateComponents setWeekday:4]; // Wednesday
NSDate *followingWednesday = [calendar dateFromComponents:dateComponents];
Хотя этот код не делает различия между средой, прошедшей на той же неделе, или следующей средой, и слышит ложь, моя проблема.
Я знаю, что могу сгенерировать две даты, одну с текущей недели, а другую со следующей недели, а затем использовать оператор if, чтобы проверить, какая из них будет в будущем, но это похоже на много кода, чтобы сделать простую вещь.
Есть ли способ лучше?
Любая помощь будет оценена по достоинству.
Обновить
Кажется, что установка дня недели на самом деле не влияет на дату, возвращаемую методом dateComponents:
NSCalendar. Мой пример кода выше возвращает одну и ту же дату независимо от того, что установлено для дня недели.
Так что теперь я больше в тупике.