web-dev-qa-db-fra.com

Comment vérifier si deux NSDates proviennent du même jour

Je travaille sur le développement iOS et je trouve qu'il est vraiment difficile de vérifier si deux NSDates proviennent du même jour. J'ai essayé d'utiliser ça

   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)

mais il vérifie simplement si deux NSDates ont une différence de 24 heures. Je pense qu'il existe un moyen de le faire fonctionner, mais je souhaite quand même avoir des valeurs NSDate avant 2 heures du matin pour qu'elles soient comptées comme la veille, j'ai donc vraiment besoin d'aide ici. Merci!

43
JoshJoshJosh

NSCalendar a une méthode qui fait exactement ce que vous voulez réellement!

/*
    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);

Vous l'utiliseriez donc comme ceci:

[[NSCalendar currentCalendar] isDate:date1 inSameDayAsDate:date2];

Ou en Swift

Calendar.current.isDate(date1, inSameDayAs:date2)
128
Catfish_Man

Vous devez comparer les composants de date:

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

Ou plus court:

let diff = Calendar.current.dateComponents([.day], from: self, to: date)
if diff.day == 0 {
    print("same day")
} else {
    print("different day")
}
9
Mike Henderson