【问题标题】:How to check NSDate against a date in TAPKU calendar如何根据 TAPKU 日历中的日期检查 NSDate
【发布时间】:2012-02-23 08:58:27
【问题描述】:

我正在使用核心数据来存储我的项目的对象。对象中有一个日期字段。我想检查 iPhone 的 Tapku 日历组件的点击日期。我的对象上的日期格式为

2011-01-10,这是一个本地化日期。

我如何检查日期与从 tapku 日历控件返回的日期。

【问题讨论】:

    标签: ios calendar nsdate tapku


    【解决方案1】:

    是的,你可以,这是我为使它工作所做的:

    关于方法:(NSArray*)calendarMonthView:(TKCalendarMonthView *)monthView 标记FromDate:(NSDate *)startDate toDate:(NSDate *)lastDate

    • 进行正常的核心数据获取获取对象数组
    • 使用 [NSArray indicesOfObjectsPassingTest:] 方法从 startDate 到 lastDate 开始每天检查
    • 对于所有通过测试的对象,将对象添加到标记数组中,并添加一个字典,其中测试日期作为键,获取的对象作为值

    警告:确保将您的 NSDate 对象转换为无时间和 GMT:0 日期,以便进行日期比较(很难学到这一点...)

    这是一些代码...

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

    可以在此处找到午夜UTC 方法: http://www.voidasterisk.org/post/4209842795/how-to-calculate-nsdate-of-midnight-in-ios

    【讨论】:

      【解决方案2】:

      可以提供更多信息,但 tapku 库在 NSDate 上有一个名为 isSameDay 的扩展方法,因此您可以使用它:

      if ([myDate isSameDay:returnedDate])
          // Do something here
      

      这就是你要找的吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-15
        • 1970-01-01
        相关资源
        最近更新 更多