【问题标题】:how to compare date in swift 3.0?如何在 swift 3.0 中比较日期?
【发布时间】:2017-07-06 18:41:46
【问题描述】:

我有两个日期,我想比较一下。 如何比较日期? 我必须约会对象。说modificateionDate 较旧的updatedDate

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

【问题讨论】:

  • 最佳实践会得到意见。展示“你”如何比较日期并询问是否有更好的方法?
  • 看看this

标签: swift3 date-comparison


【解决方案1】:

Date 现在符合Comparable 协议。所以你可以简单地使用<>==来比较两个Date类型的对象。

if modificateionDate < updatedDate {
     //modificateionDate is less than updatedDate
}

【讨论】:

  • @AshwinKanjariya 你告诉过你必须Date 实例然后这将起作用,我认为你有NSDate 实例首先确认这里显示你的代码。如果你在 Swift 3 中使用 Date 而不是 NSDate
  • @AshwinIndianic 欢迎朋友 :)
  • @AshwinIndianic 现在我知道您为什么不接受我的回答,因为您正在使用 2 个帐户并希望接受来自该答案的回答。我查了你的问题stackoverflow.com/questions/42336935/…你的工作方式不好,很快你就会知道了。
  • @AshwinIndianic 所以现在你已经更改了用户名,所以没有人会注意到这一点,很好,继续努力:)
【解决方案2】:

根据@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

【讨论】:

  • 谢谢!这个粒度函数正是我想要的。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    Swift 的比较结果与orderedAscending、orderedDescending 相同,如下所示。

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

    希望对您有所帮助。

    【讨论】:

    • Swift has ComparisonResult with orderedAscending 不,这是来自基金会。 Swift 本身没有这些。
    • 现在我 100% 确定这两个空调都是您@AshwinIndianic 的处理程序。您认为您更改了两个用户的名称并且您在这里幸存下来:P :D 很好:-
    • 感谢您的注意,但您认为不正确...您可以详细说明我不介意。
    • @Kanjariya-IOS 我注意到的是正确的,你和我都知道:P 如果你们都是不同的人,那么我的上述答案应该被“@Ashwin Indianic”接受,因为他正在接受你在另一个问题中的回答。 :-
    猜你喜欢
    • 1970-01-01
    • 2017-05-29
    • 2017-03-30
    • 1970-01-01
    • 2020-06-08
    • 2016-12-25
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    相关资源
    最近更新 更多