web-dev-qa-db-ja.com

Swift 3.0の日付を比較する方法は?

2つの日付があり、比較したいと思います。日付を比較するにはどうすればよいですか?私はオブジェクトとデートしなければなりません。 modificateionDate古いupdatedDateと言います。

では、日付を比較するためのベストプラクティスはどれですか?

7
Ashwin Indianic

DateComparable プロトコルに準拠するようになりました。したがって、単に<>および==は、2つのDateタイプのオブジェクトを比較します。

if modificateionDate < updatedDate {
     //modificateionDate is less than updatedDate
}
10
Nirav D

@NiravDの回答によると、DateComparableです。ただし、特定の粒度と比較する場合は、Calendarcompare(_:to:toGranularity:)を使用できます

例…

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

SwiftiOS 8以降単に大きいまたは小さい以上のものが必要な場合日付の比較。たとえば、当日または前日です...

注:タイムゾーンを忘れないでください。カレンダーのタイムゾーンにはデフォルトがありますが、デフォルトが気に入らない場合は、自分でタイムゾーンを設定する必要があります。今日が何日かを知るには、どのタイムゾーンで質問しているのかを知る必要があります。

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)
        }
    }

次のように使用します。

if thisDate.compareTo(date: Date(), toGranularity: .day) == .orderedDescending {
// thisDate is a previous day
}

フィルタでこれを使用する方法のより複雑な例については、次を参照してください。

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

3
t1ser