web-dev-qa-db-fra.com

comment comparer la date dans Swift 3.0?

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?

7
Ashwin Indianic

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
}
10
Nirav D

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
4
Ashley Mills

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:

https://stackoverflow.com/a/45746206/4946476

2
t1ser