我想检查2 NSDate
s它们是否在同一日期(时间可以不同)。我目前所拥有的是:
- (NSPredicate*) predicateWithDate:(NSDate *)date {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit ) fromDate:date];
//create a date with these components
NSDate *startDate = [calendar dateFromComponents:components];
[components setMonth:0];
[components setDay:1];
[components setYear:0];
NSDate *endDate = [calendar dateByAddingComponents:components toDate:startDate options:0];
return [NSPredicate predicateWithFormat:@"((ANY notes.date >= %@) AND (ANY notes.date < %@))",startDate,endDate];
}
您的startDate,endDate计算看起来几乎正确,您只忘记了NSDayCalendarUnit
:
NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:date];
有多种方法可以计算当天的开始日期和结束日期,我更喜欢以下略短的代码:
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *startDate;
NSTimeInterval interval;
[calendar rangeOfUnit:NSDayCalendarUnit startDate:&startDate interval:&interval forDate:date];
NSDate *endDate = [startDate dateByAddingTimeInterval:interval];
您的谓词将查找带有注释的所有对象date >= startDate
,以及带有(可能不同的)注释的所有对象date < endDate
。
如果要查找给定日期至少有一个音符的对象,则需要一个子查询:
[NSPredicate predicateWithFormat:@"SUBQUERY(notes, $n, $n.date >= %@ AND $n.date < %@).@count > 0",
startDate,endDate];
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句