Я могу установить следующую дату 15 дней с текущей даты, но когда я попытался указать пользовательскую дату вместо текущей даты, это не сработало.
let date = sharedAppDelegate.dueDate
let givenDate = Utility.convertStringToDate(format: "yyyy-MM-dd",
dateString: date)
let futureDate = (givenDate as NSCalendar).date(byAdding: dateComponents, to: Date()) ?? Date()
Третья строка дает ошибку типа Date? не конвертируется в NSCalendar. Ожидаемый результат: - futureDate должен быть следующей 15-й датой от данной даты.
Даже это должно не работать, если вы используете currentdate
Возможный дубликат Как быстро получить следующие 10 дней с текущей даты
Замените строку этим let futureDate = Calendar.current.date(byAdding: .day, value: 14, to: value ?? Date()) ?? Дата()
Calendar.current
дает объект NSCalendar, а не объект Date.... так что он работает... но если вы введете дату в календарь, то он никогда не будет работать
Дата не является Календарь
Вы можете использовать Calendar
для выполнения расчетов или сравнений на Date
объектах, в вашем случае вы хотите использовать календарь, чтобы добавить x
количество дней к дате начала.
Пытаться
let startDate = Date()
let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: startDate)
print(tomorrow)
ВЫХОД:
Optional(2019-06-01 07:14:48 +0000)
Вы можете расширить класс Date следующим образом.
extension Date {
func dateByAddingDays(dateNum:Int) -> Date {
return Calendar.gregorian.date(byAdding: .day, value: dateNum, to: self)!
}
}
Теперь создайте объект даты
let today = Date()
let dayAfterTomorrow = today.dateByAddingDays(dateNum:2)
debugPrint(dayAfterTomorrow)
«givenDate as NSCalendar».. ясно говорит, что вы конвертируете дату в календарь… что на 100% неверно и должно выдавать ошибку.