I have an entity with a date field and I would like to select the records for a given year. How to build a NSPredicate for the job? Didn't find anything about date functions (if any) in Core Data
thanks
Eventually I did more or less as suggested by Wienke. To create the predicate that fetches the records for a certain year(s), I did like this:
- (NSPredicate*) predicateFromYear:(NSInteger)start span:(NSInteger)aSpan {
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *dc = [NSDateComponents new];
[dc setYear:start];
NSDate *startDate,*endDate;
startDate = [cal dateFromComponents:dc];
[dc setYear:aSpan];
endDate = [cal
dateByAddingComponents:dc
toDate:startDate
options:0];
[dc release];
return [NSPredicate predicateWithFormat:
@"date >= CAST(%f, \"NSDate\") AND date < CAST(%f, \"NSDate\")",
[startDate timeIntervalSinceReferenceDate],
[endDate timeIntervalSinceReferenceDate]]; }
A possible method:
Step 1) See "Creating a Date from Components" from Apple's "Date and Time Programming Guide." Make an NSDate representing the beginning of the year, and an NSDate representing the end of the year.
Step 2) Then you could build a predicate that searches for objects with date attrs that are greater than the first date and less than the last date.
The predicate would look something like this:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@“(inceptionDate > %@) AND (inceptionDate < %@)”, dateBeginYear, dateEndYear];
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With