Search code examples
iosobjective-cnsdate

How to check if NSDate is in current week?


How to check if NSDate falls in current week of the year? I tried below but last week's date is also falling inside "Date is in this week" condition.

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

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

    NSUInteger todaysWeek = [todaysComponents weekday];


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

    NSUInteger datesWeek = [otherComponents weekday];
    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;
    }

}

Solution

  • I had to replace NSWeekCalendarUnit with NSCalendarUnitWeekOfYear

    - (NSInteger)thisW:(NSDate *)date
    {
        NSCalendar *gregorian = [[NSCalendar alloc]
                                 initWithCalendarIdentifier:NSGregorianCalendar];
        NSDateComponents *todaysComponents = [gregorian components:NSCalendarUnitWeekOfYear fromDate:[NSDate date]];
        NSUInteger todaysWeek = [todaysComponents weekOfYear];
        NSDateComponents *otherComponents = [gregorian components:NSCalendarUnitWeekOfYear 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;
        }
    
    }