swift3 - from - cómo comparar la fecha en swift 3.0?
swift date operations (4)
La respuesta de Per @ NiravD, Date
es Comparable
. Sin embargo, si desea comparar con una granularidad dada, puede usar la compare(_:to:toGranularity:)
Calendar
compare(_:to:toGranularity:)
Ejemplo…
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
Tengo dos fechas y quiero compararlo. ¿Cómo puedo comparar fechas? Tengo que fechar objetos. Diga modificateionDate
updatedDate
.
Entonces, ¿cuál es la mejor práctica para comparar fechas?
Swift tiene ComparativeResult con orderedAscending, orderedDescending y lo mismo que a continuación.
if modificateionDate.compare(updatedDate) == ComparisonResult.orderedAscending {
//Do what you want
}
Espero que esto te pueda ayudar.
Date
ahora se ajusta al protocolo Comparable
. Entonces, simplemente puede usar <
, >
y ==
para comparar dos objetos tipo Date
.
if modificateionDate < updatedDate {
//modificateionDate is less than updatedDate
}
Swift iOS 8 en adelante Cuando necesita más que simples comparaciones de fechas más grandes o más pequeñas. Por ejemplo, es el mismo día o el día anterior, ...
Nota: Nunca olvides la zona horaria. La zona horaria del calendario tiene un valor predeterminado, pero si no le gusta el valor predeterminado, debe configurar la zona horaria usted mismo. Para saber qué día es, necesita saber en qué zona horaria está preguntando.
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)
}
}
Úselo así:
if thisDate.compareTo(date: Date(), toGranularity: .day) == .orderedDescending {
// thisDate is a previous day
}
Para un ejemplo más complejo de cómo usar esto en un filtro, vea esto:
https://.com/a/45746206/4946476