2016-08-17 36 views
1

我試過下面的代碼,但我沒有得到date在下週的情況。我如何知道功能中的參數date是在下週出現的?下面的代碼總是返回1.檢查NSDate是否在下週

- (NSInteger)thisW:(NSDate *)date 
{ 
    NSCalendar *gregorian = [[NSCalendar alloc] 
          initWithCalendarIdentifier:NSGregorianCalendar]; 

    NSDateComponents *todaysComponents = 
    [gregorian components:NSYearCalendarUnit fromDate:[NSDate date]]; 

    NSUInteger todaysWeek = [todaysComponents weekOfYear]; 


    NSDateComponents *otherComponents = 
    [gregorian components:NSYearCalendarUnit fromDate:date]; 

    NSUInteger datesWeek = [otherComponents weekOfYear]; 
    //NSLog(@"Date %@",date); 
    if(todaysWeek==datesWeek){ 
     //NSLog(@"Date is in this week"); 
     return 1; 
    }else if(todaysWeek+1==datesWeek){ 
     //NSLog(@"Date is in next week"); 
     return 2; 
    } else { 
     return 0; 
    } 

} 

回答

1

你需要提取日期組件時,通過NSCalendarUnitWeekOfYear

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *todaysComponents = [gregorian components:NSCalendarUnitWeekOfYear fromDate:[NSDate date]]; 
NSUInteger todaysWeek = [todaysComponents weekOfYear]; 
NSDateComponents *otherComponents = [gregorian NSCalendarUnitWeekOfYear fromDate:date]; 
NSUInteger datesWeek = [otherComponents weekOfYear]; 
0

使用datecomponents一週計算會給你的問題,當日期接近年底,即「 (ISO 8601)「

我發現在這種情況下比較日期與特定粒度,每週更容易(下面的代碼檢測是否日期多於開始e周過去,上週,本週,下週或未來更多)

-(EventWeekRange)numberOfWeeksFromTodayToEvent:(NSDate *)eventDate { 
    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSComparisonResult comparison = [calendar compareDate:[NSDate date] toDate:eventDate toUnitGranularity:NSCalendarUnitWeekOfYear]; 
    if (comparison == NSOrderedSame) { 
     return RangeThisWeek; 
    } else if (comparison == NSOrderedAscending) { // The event date is in the future 
     // Advance today's date one week to check if this new date is in the same week as the event 
     NSDate *todaysNextWeek = [[NSDate date]dateByAddingTimeInterval:60*60*24*7]; 
     if ([calendar compareDate:todaysNextWeek toDate:eventDate toUnitGranularity:NSCalendarUnitWeekOfYear] == NSOrderedSame) { 
      return RangeNextWeek; 
     } else { 
      return RangeLater; 
     } 
    } else { // The event date is in the past 
     // Advance the event's date one week to check if this new date is in the same week as today 
     NSDate *eventsNextWeek = [eventDate dateByAddingTimeInterval:60*60*24*7]; 
     if ([calendar compareDate:eventsNextWeek toDate:[NSDate date] toUnitGranularity:NSCalendarUnitWeekOfYear] == NSOrderedSame) { 
      return RangeLastWeek; 
     } else { 
      return RangeEarlier; 
     } 
    } 
}