I would like to check if a NSDate is before (in the past) by comparing it to the current date. How would I do this?
Thanks
I find the earlierDate
method.
if date1.earlierDate(date2).isEqualToDate(date1) {
print("date1 is earlier than date2")
}
You also have the laterDate
method.
Swift 3 to swift 5:
if date1 < date2 {
print("date1 is earlier than date2")
}
There is a simple way to do that. (Swift 3 is even more simple, check at end of answer)
Swift code:
if myDate.timeIntervalSinceNow.isSignMinus {
//myDate is earlier than Now (date and time)
} else {
//myDate is equal or after than Now (date and time)
}
If you need compare date without time ("MM/dd/yyyy").
Swift code:
//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
}
Apple docs link here.
Edit 1: Important
From Swift 3 migration notes:
The migrator is conservative but there are some uses of NSDate that have better representations in Swift 3:
(x as NSDate).earlierDate(y)
can be changed tox < y ? x : y
(x as NSDate).laterDate(y)
can be changed tox < y ? y : x
So, in Swift 3 you be able to use comparison operators.
If you need to compare one date with now without creation of new Date object you can simply use this in Swift 3:
if (futureDate.timeIntervalSinceNow.sign == .plus) {
// date is in future
}
and
if (dateInPast.timeIntervalSinceNow.sign == .minus) {
// date is in past
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With