Swift days between two NSDates Swift days between two NSDates ios ios

Swift days between two NSDates


You have to consider the time difference as well. For example if you compare the dates 2015-01-01 10:00 and 2015-01-02 09:00, days between those dates will return as 0 (zero) since the difference between those dates is less than 24 hours (it's 23 hours).

If your purpose is to get the exact day number between two dates, you can work around this issue like this:

// Assuming that firstDate and secondDate are defined// ...let calendar = NSCalendar.currentCalendar()// Replace the hour (time) of both dates with 00:00let date1 = calendar.startOfDayForDate(firstDate)let date2 = calendar.startOfDayForDate(secondDate)let flags = NSCalendarUnit.Daylet components = calendar.components(flags, fromDate: date1, toDate: date2, options: [])components.day  // This will return the number of day(s) between dates

Swift 3 and Swift 4 Version

let calendar = Calendar.current// Replace the hour (time) of both dates with 00:00let date1 = calendar.startOfDay(for: firstDate)let date2 = calendar.startOfDay(for: secondDate)let components = calendar.dateComponents([.day], from: date1, to: date2)


Here is my answer for Swift 2:

func daysBetweenDates(startDate: NSDate, endDate: NSDate) -> Int{    let calendar = NSCalendar.currentCalendar()    let components = calendar.components([.Day], fromDate: startDate, toDate: endDate, options: [])    return components.day}


I see a couple Swift3 answers so I'll add my own:

public static func daysBetween(start: Date, end: Date) -> Int {   Calendar.current.dateComponents([.day], from: start, to: end).day!}

The naming feels more Swifty, it's one line, and using the latest dateComponents() method.