У меня есть две даты, и я хочу их сравнить. Как сравнить даты? Я должен встречаться с объектами. Скажите modificateionDate
старше updatedDate
.
Итак, как лучше всего сравнивать даты?
У меня есть две даты, и я хочу их сравнить. Как сравнить даты? Я должен встречаться с объектами. Скажите modificateionDate
старше updatedDate
.
Итак, как лучше всего сравнивать даты?
Date
теперь соответствует Comparable
протокол. Таким образом, вы можете просто использовать <
, >
и ==
для сравнения двух объектов типа Date
.
if modificateionDate < updatedDate {
//modificateionDate is less than updatedDate
}
Date
экземпляр, тогда это сработает, я думаю, у вас есть NSDate
экземпляр, сначала подтвердите это здесь, покажите свой код. Тесто, если вы используете Date
вместо NSDate
в Swift 3
- person Nirav D; 17.02.2017
Согласно ответу @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
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
Swift имеет ComparisonResult с упорядоченным по возрастанию, упорядоченным по убыванию и таким же, как показано ниже.
if modificateionDate.compare(updatedDate) == ComparisonResult.orderedAscending {
//Do what you want
}
Надеюсь, это поможет вам.
Swift has ComparisonResult with orderedAscending
Нет. Это из Фонда. В самом Swift их нет.
- person Eric Aya; 17.02.2017