Найдите все дни недели / месяца / года и добавьте в NSMutableArray

#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];
}
 

Обратите внимание, что это приведет к сбору дат, включающих первую дату, исключая последнюю дату. Вероятно, вы можете самостоятельно решить, как изменить граничные условия.