我有一个核心数据上下文,其中包含存储有日期的对象。我想按此顺序仅获取当前一周(周一至周日)的数据。我没有寻找过去7天。

日期可以是存储在实体中的日期,也可以是将对象添加到核心数据时的日期(它们相同)。

我可以使用带有开始日期和结束日期的谓词,如下所示:

NSPredicate *weekPredicate = [NSPredicate predicateWithFormat:@"((date > %@) AND (date <= %@)) || (date = nil)",startDate,endDate];

但是如何计算startDate和endDate?

最佳答案

-(NSDate *) lastMondayBeforeDate:(NSDate*)timeStamp {
   NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
   NSDateComponents *comps =
      [gregorian components:NSWeekdayCalendarUnit fromDate:timeStamp];
   NSInteger weekday = [comps weekday];
   weekday = weekday==1 ? 6 : weekday-2; // start with 0 on Monday rather than 1 on Sunday
   NSTimeInterval secondsSinceMondayMidnight =
     (NSUInteger) [timeStamp timeIntervalSince1970] % 60*60*24 + weekday * 60*60*24;
   return [timeStamp dateByAddingTimeInterval:-secondsSinceMondayMidnight];
}

-(NSDate *) nextMondayAfterDate:(NSDate*)timeStamp {
   return [[self lastMondayBeforeDate:timeStamp]
      dateByAddingTimeInterval:60*60*24*7];
}

关于iphone - 核心数据获取本周的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9758813/

10-11 17:23