比较两个NSDate并忽略时间分量

比较两个NSDate的最有效/推荐的方法是什么?我希望能够看到两个日期是否都在同一天,与时间无关,并且已经开始编写一些代码,该代码使用NSDate类中的timeIntervalSinceDate:方法,并获取该值的整数除以秒数一天内。这似乎很漫长,我觉得我缺少明显的东西。


我要修复的代码是:


if (!([key compare:todaysDate] == NSOrderedDescending))

{

    todaysDateSection = [eventSectionsArray count] - 1;

}

其中key和todaysDate是NSDate对象,而todaysDate使用以下方法创建:


NSDate *todaysDate = [[NSDate alloc] init];


DIEA
浏览 724回答 3
3回答

慕桂英4014372

在进行比较之前,您将日期中的时间设置为00:00:00:unsigned int flags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;NSCalendar* calendar = [NSCalendar currentCalendar];NSDateComponents* components = [calendar components:flags fromDate:date];NSDate* dateOnly = [calendar dateFromComponents:components];// ... necessary cleanup

慕勒3428872

令我惊讶的是,没有其他答案可以使用此选项来获取对象的“开始日期”日期:[[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay startDate:&date1 interval:NULL forDate:date1];[[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay startDate:&date2 interval:NULL forDate:date2];哪个设置date1并date2开始各自的日子。如果它们相等,则它们在同一天。或此选项:NSUInteger day1 = [[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit inUnit: forDate:date1];NSUInteger day2 = [[NSCalendar currentCalendar] ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:date2];其中规定day1,并day2以可以比较有点武断值。如果它们相等,则它们在同一天。

繁星coding

iOS 8向NSCalendar引入了一种新方法,使此操作变得更加容易。- (NSComparisonResult)compareDate:(NSDate *)date1 toDate:(NSDate *)date2 toUnitGranularity:(NSCalendarUnit)unit NS_AVAILABLE(10_9, 8_0);您可以将粒度设置为重要的单位。这将忽略所有其他单位,并将比较范围限制为所选单位。
打开App,查看更多内容
随时随地看视频慕课网APP