С iOS 8 и 10.9 теперь вы можете сделать это намного проще.Вы можете добавить любое число любого календарного блока к дате.Я объявил метод NSDate очень маленькой категории, чтобы сделать это еще быстрее (так как мне просто нужно было добавлять дни в моем приложении).Код ниже.
-(NSDate *)addDaysToDate:(NSNumber *)numOfDaysToAdd {
NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitDay value:numOfDaysToAdd.integerValue toDate:self options:nil];
return newDate;
}
Ключевые вещи: NSCalendarUnitDay - это то, что я использовал, чтобы сообщить, что я хочу добавить дни.Вы можете изменить это на другие значения перечисления, такие как месяцы или годы.
Так как это категория на NSDate, я добавляю значение к себе.Если вы не хотите объявлять категорию, вы просто берете дату в параметрах метода, например:
-(NSDate *)addDays:(NSNumber *)numOfDaysToAdd toDate:(NSDate *)originalDate {
NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitDay value:numOfDaysToAdd.integerValue toDate:originalDate options:nil];
return newDate;
}
Я использую NSNumber, но вы легко можете просто использовать NSInteger.
Наконец, в Swift:
func addDaysToDate(daysToAdd: Int, originalDate: NSDate) -> NSDate? {
let newDate = NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.DayCalendarUnit, value: daysToAdd, toDate: originalDate, options: nil)
return newDate
}
Если вы хотите избавиться от NSDate?и почувствуйте себя комфортно, развернув возможный ноль (добавление даты может не получиться), вы можете просто вернуть newDate!и избавиться от?знак.