#ios #objective-c #nsdate #nscalendar
#iOS #цель-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:
Ты уже в пути. Ключ состоит в том, чтобы продвинуть день компонента в цикле и извлечь из него дату.
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];
}
Обратите внимание, что это приведет к сбору дат, включающих первую дату, исключая последнюю дату. Вероятно, вы можете самостоятельно решить, как изменить граничные условия.