2つの日付があり、比較したいと思います。日付を比較するにはどうすればよいですか?私はオブジェクトとデートしなければなりません。 modificateionDate
古いupdatedDate
と言います。
では、日付を比較するためのベストプラクティスはどれですか?
Date
が Comparable
プロトコルに準拠するようになりました。したがって、単に<
、>
および==
は、2つのDate
タイプのオブジェクトを比較します。
if modificateionDate < updatedDate {
//modificateionDate is less than updatedDate
}
@NiravDの回答によると、Date
はComparable
です。ただし、特定の粒度と比較する場合は、Calendar
のcompare(_: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
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
}
フィルタでこれを使用する方法のより複雑な例については、次を参照してください。