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.
- Comparablerequires that- Dateimplement the operators:- <,- <=,- >,- >=.
- Equatablerequires that- Dateimplement the- ==operator.
- Equatableallows- Dateto 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 Foundation
func 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 != date2
describeComparison(date1: now, date2: now.addingTimeInterval(-1))
// date1 > date2,  date1 >= date2,  date1 != date2
describeComparison(date1: now, date2: now)
// date1 <= date2,  date1 >= date2,  date1 == date2