如何检查 NSDate 是否在本周?

Dee*_*kur 5 objective-c nsdate ios

如何检查是否NSDate落在一年中的本周?我在下面尝试过,但上周的日期也符合"Date is in this week"条件。

- (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;
    }

}
Run Code Online (Sandbox Code Playgroud)

use*_*800 6

Swift 4 中的这个简短扩展怎么样?

extension Calendar {
    func isDayInCurrentWeek(date: Date) -> Bool? {
        let currentComponents = Calendar.current.dateComponents([.weekOfYear], from: Date())
        let dateComponents = Calendar.current.dateComponents([.weekOfYear], from: date)
        guard let currentWeekOfYear = currentComponents.weekOfYear, let dateWeekOfYear = dateComponents.weekOfYear else { return nil }
        return currentWeekOfYear == dateWeekOfYear
    }
}
Run Code Online (Sandbox Code Playgroud)


Dee*_*kur 1

我不得不替换NSWeekCalendarUnitNSCalendarUnitWeekOfYear

- (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;
    }

}
Run Code Online (Sandbox Code Playgroud)