Swift 3 - Comparing Date objects
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 thatDate
implement the operators:<
,<=
,>
,>=
.Equatable
requires thatDate
implement the==
operator.Equatable
allowsDate
to use the default implementation of the!=
operator (which is the inverse of theEquatable
==
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)