ios - Cómo verificar si dos NSDates son del mismo día
swift (2)
Esta pregunta ya tiene una respuesta aquí:
- Comparando NSDates sin componente de tiempo 17 respuestas
Estoy trabajando en el desarrollo de ios y me resulta muy difícil comprobar si dos NSDates son del mismo día. Traté de usar esto
fetchDateList()
// Check date
let date = NSDate()
// setup date formatter
let dateFormatter = NSDateFormatter()
// set current time zone
dateFormatter.locale = NSLocale.currentLocale()
let latestDate = dataList[dataList.count-1].valueForKey("representDate") as! NSDate
//let newDate = dateFormatter.stringFromDate(date)
let diffDateComponent = NSCalendar.currentCalendar().components([NSCalendarUnit.Year, NSCalendarUnit.Month, NSCalendarUnit.Day], fromDate: latestDate, toDate: date, options: NSCalendarOptions.init(rawValue: 0))
print(diffDateComponent.day)
pero solo verifica si dos NSDates tienen una diferencia de 24 horas. Creo que hay una manera de hacer que funcione, pero aún así, deseo tener los valores de NSDate antes de las 2 am de la mañana para ser contados como el día anterior, así que definitivamente necesito ayuda aquí. ¡Gracias!
¡NSCalendar tiene un método que hace exactamente lo que realmente quieres!
/*
This API compares the Days of the given dates, reporting them equal if they are in the same Day.
*/
- (BOOL)isDate:(NSDate *)date1 inSameDayAsDate:(NSDate *)date2 NS_AVAILABLE(10_9, 8_0);
Así que lo usarías así:
[[NSCalendar currentCalendar] isDate:date1 inSameDayAsDate:date2];
O en Swift
Calendar.current.isDate(date1, inSameDayAs:date2)
Debes comparar los componentes de la fecha:
let date1 = NSDate(timeIntervalSinceNow: 0)
let date2 = NSDate(timeIntervalSinceNow: 3600)
let components1 = NSCalendar.currentCalendar().components([.Year, .Month, .Day], fromDate: date1)
let components2 = NSCalendar.currentCalendar().components([.Year, .Month, .Day], fromDate: date2)
if components1.year == components2.year && components1.month == components2.month && components1.day == components2.day {
print("same date")
} else {
print("different date")
}
O más corto:
let diff = Calendar.current.dateComponents([.day], from: self, to: date)
if diff.day == 0 {
print("same day")
} else {
print("different day")
}