Swift 3 - Comparing Date objects Swift 3 - Comparing Date objects ios ios

Swift 3 - Comparing Date objects


I have tried this snippet (in Xcode 8 Beta 6), and it is working fine.

let date1 = Date()let date2 = Date().addingTimeInterval(100)if date1 == date2 { ... }else if date1 > date2 { ... }else if date1 < date2 { ... }


Date is Comparable & Equatable (as of Swift 3)

This answer complements @Ankit Thakur's answer.

Since Swift 3 the Date struct (based on the underlying NSDate class) adopts the Comparable and Equatable protocols.

  • Comparable requires that Date implement the operators: <, <=, >, >=.
  • Equatable requires that Date implement the == operator.
  • Equatable allows Date to use the default implementation of the != operator (which is the inverse of the Equatable == operator implementation).

The following sample code exercises these comparison operators and confirms which comparisons are true with print statements.

Comparison function

import Foundationfunc describeComparison(date1: Date, date2: Date) -> String {    var descriptionArray: [String] = []    if date1 < date2 {        descriptionArray.append("date1 < date2")    }    if date1 <= date2 {        descriptionArray.append("date1 <= date2")    }    if date1 > date2 {        descriptionArray.append("date1 > date2")    }    if date1 >= date2 {        descriptionArray.append("date1 >= date2")    }    if date1 == date2 {        descriptionArray.append("date1 == date2")    }    if date1 != date2 {        descriptionArray.append("date1 != date2")    }    return descriptionArray.joined(separator: ",  ")}

Sample Use

let now = Date()describeComparison(date1: now, date2: now.addingTimeInterval(1))// date1 < date2,  date1 <= date2,  date1 != date2describeComparison(date1: now, date2: now.addingTimeInterval(-1))// date1 > date2,  date1 >= date2,  date1 != date2describeComparison(date1: now, date2: now)// date1 <= date2,  date1 >= date2,  date1 == date2


from Swift 3 and above, Date is Comparable so we can directly compare dates like

let date1 = Date()let date2 = Date().addingTimeInterval(50)let isGreater = date1 > date2print(isGreater)let isSmaller = date1 < date2print(isSmaller)let isEqual = date1 == date2print(isEqual)

Alternatively We can create extension on Date

extension Date {  func isEqualTo(_ date: Date) -> Bool {    return self == date  }    func isGreaterThan(_ date: Date) -> Bool {     return self > date  }    func isSmallerThan(_ date: Date) -> Bool {     return self < date  }}

Use: let isEqual = date1.isEqualTo(date2)