All dates between two Date objects (Swift)
Just add one day unit to the date until it reachesthe current date (Swift 2 code):
var date = startDateNSDate // first datelet endDate = NSDate() // last date// Formatter for printing the date, adjust it according to your needs:let fmt = NSDateFormatter()fmt.dateFormat = "dd/MM/yyyy"// While date <= endDate ...while date.compare(endDate) != .OrderedDescending { print(fmt.stringFromDate(date)) // Advance by one day: date = calendar.dateByAddingUnit(.Day, value: 1, toDate: date, options: [])!}
Update for Swift 3:
var date = startDate // first datelet endDate = Date() // last date// Formatter for printing the date, adjust it according to your needs:let fmt = DateFormatter()fmt.dateFormat = "dd/MM/yyyy"while date <= endDate { print(fmt.string(from: date)) date = Calendar.current.date(byAdding: .day, value: 1, to: date)!}
Using extension:
extension Date { static func dates(from fromDate: Date, to toDate: Date) -> [Date] { var dates: [Date] = [] var date = fromDate while date <= toDate { dates.append(date) guard let newDate = Calendar.current.date(byAdding: .day, value: 1, to: date) else { break } date = newDate } return dates }}
Usage:
let datesBetweenArray = Date.dates(from: Date(), to: Date())
Same thing but prettier:
extension Date { func allDates(till endDate: Date) -> [Date] { var date = self var array: [Date] = [] while date <= endDate { array.append(date) date = Calendar.current.date(byAdding: .day, value: 1, to: date)! } return array }}
How to get all dates for next 20 days:
if let date = Calendar.current.date(byAdding: .day, value: 20, to: Date()) { print(Date().allDates(till: date))}