I am getting number of days,Start date and end date from a service. I want to get the list of all dates in between start date and end date. Let\'s say my start date is 2017/
You are making it really complicated.Just use simple date class methods for difference and generate new dates with a for loop and Calendar class.
let startDate = Date()
let endDate = Date(timeInterval: 2*86400, since: startDate)
let components = Calendar.current.dateComponents([.day], from: startDate, to: endDate)
let numberOfDays = components.day ?? 0
for i in 1...numberOfDays {
let nextDate = Calendar.current.date(byAdding: .day, value: i, to: startDate)
print(nextDate)
}
A simple while loop will get you what you need. Example:
func generateDates(startDate :Date?, addbyUnit:Calendar.Component, value : Int) -> [Date] {
var dates = [Date]()
var date = startDate!
let endDate = Calendar.current.date(byAdding: addbyUnit, value: value, to: date)!
while date < endDate {
date = Calendar.current.date(byAdding: addbyUnit, value: 1, to: date)!
dates.append(date)
}
return dates
}
Edit: Or you can change your implementation slightly if you get your end date in advance
func generateDates(between startDate: Date?, and endDate: Date?, byAdding: Calendar.Component) -> [Date] {
var dates = [Date]()
guard var date = startDate, let endDate = endDate else {
return []
}
while date < endDate {
date = Calendar.current.date(byAdding: byAdding, value: 1, to: date)!
dates.append(date)
}
return dates
}