查找一周/月/年的所有日期并添加到NSMutableArray

时间:2014-06-21 20:09:39

标签: ios objective-c nsdate nscalendar

我有一个NSMutableArray,我希望能够只提取每周,每月或每年的时间范围内的行。我可以得到一个星期的一个日期,所以我会有一个星期的当前日期和日期,但我需要能够抓住所有那些日子然后将它们添加到一个数组,以便我可以搜索它们。

这就是我如何抓住一周又一天的日子。

-(void)getCalDays {
cal = [NSCalendar currentCalendar];

NSDate *date = [NSDate date];
NSDateComponents *comps = [cal components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)fromDate:date];
today = [cal dateFromComponents:comps];


   NSLog(@"today is %@", today);
    [self getWeek];
}

-(void)getWeek {
    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setDay:-6];
    weekDate = [cal dateByAddingComponents:components toDate:today options:0];
    NSLog(@"Week of %@ THRU %@", today, weekDate);
}

那么我怎样才能找到两个日期之间的所有日子并将它们加载到一个数组中?

1 个答案:

答案 0 :(得分:2)

你在路上。关键是在循环中推进组件的日期并从中提取日期。

NSMutableArray *result = [NSMutableArray array];
NSCalendar *cal = [NSCalendar currentCalendar];

NSDate *startDate = // your input start date
NSDate *endDate = // your input end date

NSDateComponents *comps = [cal components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)fromDate:startDate];
NSDate *date = [cal dateFromComponents:comps];

while (![date isEqualToDate:endDate]) {
    [result addObject:date];
    [comps setDay:(comps.day + 1)];
    date = [cal dateFromComponents:comps];
}

请注意,这将导致第一个日期的日期包含的集合,独占的最后日期。你可以自己解决如何改变边缘条件。