我正在尝试获取给定日期当前周的所有日期:
在下面的示例中,输入为
2015-11-29 23:40:37 +0000
,所以我希望输出是11月23日到11月29日的日期数组,但实际输出是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;
}
答案 0 :(得分:1)
您可以使用以下代码获取本周和下周的所有日期: -
NSArray * allDatesOfThisWeek = [self daysThisWeek];
NSArray * allDatesOfNextWeek = [self daysNextWeek];
以下方法用于计算本周的日期: -
-(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];
}
如果你想从今天开始下周的日期,那么就像这样传递weekOffset = 2: -
NSArray * allDatesOfNextToNextWeek = [self daysInWeek:2 fromDate:now];
如果你想从今天开始上周的日期,那么就像这样传递weekOffset = -1: -
NSArray * allDatesOfPreviousWeek = [self daysInWeek:-1 fromDate:now];
希望,这是你正在寻找的。任何关注都会回复给我。