46 votes

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 que les valeurs NSDate avant 2 heures du matin soient comptées comme la veille, j'ai donc vraiment besoin d'aide ici. Merci!

139voto

Catfish_Man Points 15439

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

Donc, vous l'utiliseriez comme ceci:

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

Ou en Swift

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

10voto

Mike Henderson Points 863

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X