swift3 - swift时间差 - swift时间格式化




如何在swift 3.0中比较日期? (3)

我有两个日期,我想比较它。 我如何比较日期? 我必须约会对象。 说modificateionDateupdatedDate

那么最好的做法是比较日期?


Per @ 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

Swift有orderedAscending,orderedDescending和以下相同的ComparisonResult。

if modificateionDate.compare(updatedDate) == ComparisonResult.orderedAscending {
            //Do what you want
}

希望这可以帮助你。


Swift iOS 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://.com/a/45746206/4946476