J'ai deux dates et je veux comparer ... Comment puis-je comparer des dates? Je dois dater des objets. Dites modificateionDate
plus vieux updatedDate
.
Alors, quelle est la meilleure pratique pour comparer les dates?
Date
est maintenant conforme à Comparable
protocol. Vous pouvez donc simplement utiliser <
, >
et ==
pour comparer deux objets de type Date
.
if modificateionDate < updatedDate {
//modificateionDate is less than updatedDate
}
Pour la réponse de @ NiravD, Date
est Comparable
. Toutefois, si vous souhaitez comparer à une granularité donnée, vous pouvez utiliser Calendar
's compare(_:to:toGranularity:)
Exemple…
let dateRangeStart = Date()
let dateRangeEnd = Date().addingTimeInterval(1234)
// Using granularity of .minute
let order = Calendar.current.compare(dateRangeStart, to: dateRangeEnd, toGranularity: .minute)
switch order {
case .orderedAscending:
print("\(dateRangeEnd) is after \(dateRangeStart)")
case .orderedDescending:
print("\(dateRangeEnd) is before \(dateRangeStart)")
default:
print("\(dateRangeEnd) is the same as \(dateRangeStart)")
}
> 2017-02-17 10:35:48 +0000 is after 2017-02-17 10:15:14 +0000
// Using granularity .hour
let order = Calendar.current.compare(dateRangeStart, to: dateRangeEnd, toGranularity: .hour)
> 2017-02-17 10:37:23 +0000 is the same as 2017-02-17 10:16:49 +0000
SwiftiOS 8 et plus Lorsque vous avez besoin de plus que des comparaisons de dates plus grandes ou plus petites. Par exemple, est-ce le même jour ou le jour précédent, ...
Note: N'oubliez jamais le fuseau horaire. Le fuseau horaire de calendrier a une valeur par défaut, mais si vous n'aimez pas la valeur par défaut, vous devez le définir vous-même. Pour savoir de quel jour il s’agit, vous devez savoir dans quel fuseau horaire vous demandez.
extension Date {
func compareTo(date: Date, toGranularity: Calendar.Component ) -> ComparisonResult {
var cal = Calendar.current
cal.timeZone = TimeZone(identifier: "Europe/Paris")!
return cal.compare(self, to: date, toGranularity: toGranularity)
}
}
Utilisez-le comme ceci:
if thisDate.compareTo(date: Date(), toGranularity: .day) == .orderedDescending {
// thisDate is a previous day
}
Pour un exemple plus complexe d'utilisation de ceci dans un filtre, voir ceci: