По соображениям производительности я хотел бы создать две даты, "сегодня" (00:00:00) и "завтра" (00:00:00). Вы используете эти даты в качестве границ для сравнения. Если дата равна или больше, чем сегодня, и меньше, чем завтра, это соответствует.
Поскольку сравнение NSDate в основном является двойным (примитивным типом), этот метод будет быстрее, чем сравнение объектов NSString или NSDateComponents. Для создания NSDateComponents используется большая математика, и NSDateFormatters, вероятно, сами используют NSDateComponents.
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *todayComponents = [[NSDateComponents alloc] init];
todayComponents.year = 2013;
todayComponents.month = 6;
todayComponents.day = 21;
// today must be at the beginning of your search day. i.e. 00:00:00
NSDate *today = [calendar dateFromComponents:todayComponents];
NSDateComponents *oneDayOffset = [[NSDateComponents alloc] init];
oneDayOffset.day = 1;
NSDate *tomorrow = [calendar dateByAddingComponents:oneDayOffset toDate:today options:0];
NSIndexSet *todaysIndexes = [array indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
if ([(NSDate *)obj compare:today] != NSOrderedAscending && [(NSDate *)obj compare:tomorrow] == NSOrderedAscending) {
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ obj is not earlier than "today" (= same time or later)
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ obj is earlier than "tomorrow"
return YES;
}
return NO;
}];
NSLog(@"%d", [todaysIndexes count]);
Замените сегодня с вашей датой поиска (в полночь), и вы готовы к работе.
Петля. Что вы пробовали? Что не получилось, как вы ожидали/надеялись? – Wain
Проверить исправленное сообщение PLS –
Что @Wain сказал - цикл через массив и счет. Вы, конечно, сначала должны определить, что вы подразумеваете под «в тот же день». Вы можете найти это проще всего, если массив отсортирован (если это соответствует вашим другим потребностям в массиве). –