ios swift nsdate

ios - Cómo verificar si dos NSDates son del mismo día



swift (2)

Esta pregunta ya tiene una respuesta aquí:

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") }