问题
I am using core data to store objects for my project.There is a date field in the object .I want to check against the clicked date of the Tapku calendar component for iphone. The date on my object is in the format
2011-01-10 and it is a localized date .
How can i check the date against the date returned from the tapku calendar control.
回答1:
Yes you can, here is what I did to make it work:
on the method: (NSArray*)calendarMonthView:(TKCalendarMonthView *)monthView marksFromDate:(NSDate *)startDate toDate:(NSDate *)lastDate
- Make the normal core data fetch to get an array of objects
- Start checking every day from startDate to lastDate with the [NSArray indexesOfObjectsPassingTest:] method
- For all that passes the test add and object to the marks array and add a dictionary with the tested day as key and the fetched objects as values
WARNING: make sure you cast your NSDate objects to a no time and GMT:0 dates in order to make the day comparison to work (learned this the hard way...)
Here is some code...
self.marksArray = [NSMutableArray array];
self.dataDictionary = [NSMutableDictionary dictionary];
NSCalendar *cal = [NSCalendar currentCalendar];
[cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDateComponents *comp = [cal components:(NSMonthCalendarUnit | NSMinuteCalendarUnit | NSYearCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSHourCalendarUnit | NSSecondCalendarUnit) fromDate:start];
NSDate *ds = [cal dateFromComponents:comp];
// Init offset components to increment days in the loop by one each time
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setDay:1];
while (YES) {
// Is the date beyond the last date? If so, exit the loop.
// NSOrderedDescending = the left value is greater than the right
if ([ds compare:end] == NSOrderedDescending) {
break;
}
NSIndexSet *indexes = [arrayWithObjectsFromCoreData indexesOfObjectsPassingTest:
^BOOL (id el, NSUInteger i, BOOL *stop) {
NSDate *upd = [(YOUR_ENTINY *)el updated];
NSDate *day=[self midnightUTC:upd];
if([ds isSameDay:day]){
return TRUE;
}
return FALSE;
}];
if (indexes.count>0) {
[self.marksArray addObject:[NSNumber numberWithBool:YES]];
[self.dataDictionary setObject:[wods objectsAtIndexes:indexes] forKey:ds];
}else {
//no wods in this date
[self.dataArray addObject:[NSNumber numberWithBool:NO]];
}
// Increment day using offset components (ie, 1 day in this instance)
ds = [cal dateByAddingComponents:offsetComponents toDate:ds options:0];
}
[offsetComponents release];
The midnightUTC method can be found here: http://www.voidasterisk.org/post/4209842795/how-to-calculate-nsdate-of-midnight-in-ios
回答2:
Could do with a bit more information but the tapku library has an extension method on NSDate called isSameDay so you could use that:
if ([myDate isSameDay:returnedDate])
// Do something here
Is that what you are looking for?
来源:https://stackoverflow.com/questions/7898895/how-to-check-nsdate-against-a-date-in-tapku-calendar