All dates between two Date objects (Swift) All dates between two Date objects (Swift) swift swift

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))}