iOS:获取本周的所有date

我正在尝试获取给定date当前周的所有date:

在下面的例子中,input是

2015-11-29 23:40:37 +0000

,所以我希望产出是从11月23日至11月29日的一系列date,但实际产出是11月30日至12月6日。

-(NSArray *)datesForWeekOf : (NSDate *) date { NSCalendar *calendar = [NSCalendar currentCalendar]; NSDate *startOfWeek; NSDate *endOfWeek; NSTimeInterval interval; [calendar rangeOfUnit:NSCalendarUnitWeekOfMonth startDate:&startOfWeek interval:&interval forDate:date]; endOfWeek = [startOfWeek dateByAddingTimeInterval:interval-1]; NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSCalendarIdentifierGregorian]; NSDateComponents *days = [[NSDateComponents alloc] init]; NSInteger dayCount = 0; NSMutableArray *allDates = [NSMutableArray array]; while ( TRUE ) { [days setDay: ++dayCount]; NSDate *date = [gregorianCalendar dateByAddingComponents: days toDate: startOfWeek options: 0]; [allDates addObject:date]; if ( [date compare: endOfWeek] == NSOrderedDescending ) break; } return allDates; } 

您可以使用以下代码获取本周和下周的所有date: –

 NSArray * allDatesOfThisWeek = [self daysThisWeek]; NSArray * allDatesOfNextWeek = [self daysNextWeek]; 

以下方法用于计算本周的date:

 -(NSArray*)daysThisWeek { return [self daysInWeek:0 fromDate:[NSDate date]]; } -(NSArray*)daysNextWeek { return [self daysInWeek:1 fromDate:[NSDate date]]; } -(NSArray*)daysInWeek:(int)weekOffset fromDate:(NSDate*)date { NSCalendar *calendar = [NSCalendar currentCalendar]; //ask for current week NSDateComponents *comps = [[NSDateComponents alloc] init]; comps=[calendar components:NSWeekCalendarUnit|NSYearCalendarUnit fromDate:date]; //create date on week start NSDate* weekstart=[calendar dateFromComponents:comps]; NSDateComponents* moveWeeks=[[NSDateComponents alloc] init]; moveWeeks.weekOfYear=weekOffset; weekstart=[calendar dateByAddingComponents:moveWeeks toDate:weekstart options:0]; //add 7 days NSMutableArray* week=[NSMutableArray arrayWithCapacity:7]; for (int i=1; i<=7; i++) { NSDateComponents *compsToAdd = [[NSDateComponents alloc] init]; compsToAdd.day=i; NSDate *nextDate = [calendar dateByAddingComponents:compsToAdd toDate:weekstart options:0]; [week addObject:nextDate]; } return [NSArray arrayWithArray:week]; } 

如果你想从今天起获得下周的date,那么传递weekOffset = 2是这样的: –

 NSArray * allDatesOfNextToNextWeek = [self daysInWeek:2 fromDate:now]; 

如果你想从今天起得到前一周的date,那么就像这样传递weekOffset = -1。

 NSArray * allDatesOfPreviousWeek = [self daysInWeek:-1 fromDate:now]; 

希望,这是你要找的。 任何关心回到我身边。