Solución:
Encuentro el earlierDate
método.
if date1.earlierDate(date2).isEqualToDate(date1) {
print("date1 is earlier than date2")
}
También tienes el laterDate
método.
Swift 3 a Swift 5:
if date1 < date2 {
print("date1 is earlier than date2")
}
Hay una forma sencilla de hacerlo. (Swift 3 es aún más simple, marque al final de la respuesta)
Código SWIFT:
if myDate.timeIntervalSinceNow.isSignMinus {
//myDate is earlier than Now (date and time)
} else {
//myDate is equal or after than Now (date and time)
}
Si necesita comparar fecha sin hora (“MM / dd / aaaa”).
Código SWIFT:
//Ref date
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy"
let someDate = dateFormatter.dateFromString("03/10/2015")
//Get calendar
let calendar = NSCalendar.currentCalendar()
//Get just MM/dd/yyyy from current date
let flags = NSCalendarUnit.CalendarUnitDay | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitYear
let components = calendar.components(flags, fromDate: NSDate())
//Convert to NSDate
let today = calendar.dateFromComponents(components)
if someDate!.timeIntervalSinceDate(today!).isSignMinus {
//someDate is berofe than today
} else {
//someDate is equal or after than today
}
Enlace de documentos de Apple aquí.
Edición 1: Importante
De las notas de migración de Swift 3:
El migrador es conservador, pero hay algunos usos de NSDate que tienen mejores representaciones en Swift 3:
(x as NSDate).earlierDate(y)
se puede cambiar ax < y ? x : y
(x as NSDate).laterDate(y)
se puede cambiar ax < y ? y : x
Entonces, en Swift 3 puedes usar operadores de comparación.
Si necesita comparar una fecha con ahora sin la creación de un nuevo objeto Date, simplemente puede usar esto en Swift 3:
if (futureDate.timeIntervalSinceNow.sign == .plus) {
// date is in future
}
y
if (dateInPast.timeIntervalSinceNow.sign == .minus) {
// date is in past
}