This is a little more complicated then just
NSPredicate *predicate = [NSPredicate predicateWithFormat:@\"startDate >= %@ AND endDate <= %@\", startDay,
What you want is:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"startDate <= %@ AND endDate >= %@", endDay, startDay];
In other words, you're eliminating events that start after the end of the range or end before the start, i.e., events that have an empty intersection with the range.