Objective c 一周内所有NSDate的数组

Objective c 一周内所有NSDate的数组,objective-c,ios,ios5,nsdate,Objective C,Ios,Ios5,Nsdate,我希望有一个函数,它以一个星期数作为输入,并返回一个包含所有NSDate的数组,这些NSDate是由这个特定的星期生成的 大概是这样的: -(NSArray*)allDatesInWeek:(int)weekNumber { NSDate *today = [NSDate date]; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; [c

我希望有一个函数,它以一个星期数作为输入,并返回一个包含所有NSDate的数组,这些NSDate是由这个特定的星期生成的

大概是这样的:

-(NSArray*)allDatesInWeek:(int)weekNumber {
    NSDate *today = [NSDate date];
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    [calendar setFirstWeekday:2];
    NSDateComponents *todayComp = [calendar components:NSYearCalendarUnit fromDate:today];
    int currentyear = todayComp.year;
    /* Calculate and return the date of weekNumber for current year */
}

如何以一种简单的方式实现这一点?

已经过测试

-(NSArray*)allDatesInWeek:(int)weekNumber {
   // determine weekday of first day of year: 
   NSCalendar *greg = [[NSCalendar alloc] 
      initWithCalendarIdentifier:NSGregorianCalendar];
   NSDateComponents *coms = [[NSDateComponents alloc] init];
   comps.day = 1;
   NSDate *today = [NSDate date];
   NSDate *tomorrow = [greg dateByAddingComponents:comps toDate:today];
   const NSTimeInterval kDay = [tomorrow timeIntervalSinceDate:today];
   comps = [greg components:NSYearCalendarUnit fromDate:[NSDate date]];
   comps.day = 1;
   comps.month = 1; 
   comps.hour = 12;
   NSDate *start = [greg dateFromComponents:comps];
   comps = [greg components:NSWeekdayCalendarUnit fromDate:start]; 
   if (weekNumber==1) {
       start = [start dateByAddingTimeInterval:-kDay*(comps.weekday-1)];
   } else {
       start = [start dateByAddingTimeInterval:
          kDay*(8-comps.weekday+7*(weekNumber-2))];
   }
   NSMutableArray *result = [NSMutableArray array];
   for (int i = 0; i<7; i++) {
       [result addObject:[start dateByAddingTimeInterval:kDay*i]];
   }
   return [NSArray arrayWithArray:result];
}
-(NSArray*)所有日期每周:(int)周数{
//确定一年中第一天的工作日:
NSCalendar*greg=[[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents*coms=[[NSDateComponents alloc]init];
综合日=1;
NSDate*今天=[NSDate日期];
NSDate*明天=[greg dateByAddingComponents:comps toDate:today];
const NSTimeInterval kDay=[明天时间间隔开始日期:今天];
comps=[greg components:NSYearCalendarUnit fromDate:[NSDate date]];
综合日=1;
比较月份=1;
补偿小时=12;
NSDate*start=[greg dateFromComponents:comps];
comps=[greg components:nsWeekdayCalendarUnitFromDate:start];
如果(周数==1){
开始=[start dateByAddingTimeInterval:-kDay*(公司工作日-1)];
}否则{
开始=[开始日期通过添加时间间隔:
工作日*(8-comps.weekday+7*(weekNumber-2))];
}
NSMutableArray*结果=[NSMutableArray];
对于(inti=0;i

-(NSArray*)allDatesInWeek:(int)weekNumber {
   // determine weekday of first day of year: 
   NSCalendar *greg = [[NSCalendar alloc] 
      initWithCalendarIdentifier:NSGregorianCalendar];
   NSDateComponents *coms = [[NSDateComponents alloc] init];
   comps.day = 1;
   NSDate *today = [NSDate date];
   NSDate *tomorrow = [greg dateByAddingComponents:comps toDate:today];
   const NSTimeInterval kDay = [tomorrow timeIntervalSinceDate:today];
   comps = [greg components:NSYearCalendarUnit fromDate:[NSDate date]];
   comps.day = 1;
   comps.month = 1; 
   comps.hour = 12;
   NSDate *start = [greg dateFromComponents:comps];
   comps = [greg components:NSWeekdayCalendarUnit fromDate:start]; 
   if (weekNumber==1) {
       start = [start dateByAddingTimeInterval:-kDay*(comps.weekday-1)];
   } else {
       start = [start dateByAddingTimeInterval:
          kDay*(8-comps.weekday+7*(weekNumber-2))];
   }
   NSMutableArray *result = [NSMutableArray array];
   for (int i = 0; i<7; i++) {
       [result addObject:[start dateByAddingTimeInterval:kDay*i]];
   }
   return [NSArray arrayWithArray:result];
}
-(NSArray*)所有日期每周:(int)周数{
//确定一年中第一天的工作日:
NSCalendar*greg=[[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents*coms=[[NSDateComponents alloc]init];
综合日=1;
NSDate*今天=[NSDate日期];
NSDate*明天=[greg dateByAddingComponents:comps toDate:today];
const NSTimeInterval kDay=[明天时间间隔开始日期:今天];
comps=[greg components:NSYearCalendarUnit fromDate:[NSDate date]];
综合日=1;
比较月份=1;
补偿小时=12;
NSDate*start=[greg dateFromComponents:comps];
comps=[greg components:nsWeekdayCalendarUnitFromDate:start];
如果(周数==1){
开始=[start dateByAddingTimeInterval:-kDay*(公司工作日-1)];
}否则{
开始=[开始日期通过添加时间间隔:
工作日*(8-comps.weekday+7*(weekNumber-2))];
}
NSMutableArray*结果=[NSMutableArray];

对于(int i=0;i,此解决方案完全依赖于NSCalendar,而不对用户的日历进行任何假设

-(NSArray*)allDatesInWeekContainingDate:(NSDate*)referenceDate {
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSInteger ordinalityOfInput = [calendar ordinalityOfUnit:NSWeekdayCalendarUnit
                                                      inUnit:NSWeekCalendarUnit
                                                     forDate:referenceDate];
    NSDateComponents *componentsToAdd = [[NSDateComponents alloc] init];
    componentsToAdd.day = -1 * (ordinalityOfInput - 1);
    NSDate *startDate = [calendar dateByAddingComponents:componentsToAdd toDate:referenceDate options:0];
    NSInteger numDaysInWeek = [calendar maximumRangeOfUnit:NSWeekdayCalendarUnit].length;
    NSMutableArray *allDays = [NSMutableArray arrayWithCapacity:numDaysInWeek];
    NSDateComponents *curDayOffset = [[NSDateComponents alloc] init];
    for (int curDay=0; curDay < numDaysInWeek; curDay++) {
        curDayOffset.day = curDay;
        [allDays addObject:[calendar dateByAddingComponents:curDayOffset toDate:startDate options:0]];
    }
    return allDays;
}
-(NSArray*)所有日期包含日期:(NSDate*)参考日期{
NSCalendar*日历=[NSCalendar currentCalendar];
NSInteger ordinalityOfInput=[日历顺序功能:NSWeekdayCalendarUnit
inUnit:NSWeekCalendarUnit
forDate:referenceDate];
NSDateComponents*componentsToAdd=[[NSDateComponents alloc]init];
componentsToAdd.day=-1*(ordinalityOfInput-1);
NSDate*startDate=[calendar Date ByAddingComponents:Components StoAddToDate:referenceDate选项:0];
NSInteger numDaysInWeek=[calendar maximumRangeOfUnit:NSWeekdayCalendarUnit]。长度;
NSMUTABLEARRY*allDays=[NSMUTABLEARRY阵列容量:numDaysInWeek];
NSDateComponents*curDayOffset=[[NSDateComponents alloc]init];
对于(int curDay=0;curDay
此解决方案完全依赖于NSCalendar,而不对用户的日历进行任何假设

-(NSArray*)allDatesInWeekContainingDate:(NSDate*)referenceDate {
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSInteger ordinalityOfInput = [calendar ordinalityOfUnit:NSWeekdayCalendarUnit
                                                      inUnit:NSWeekCalendarUnit
                                                     forDate:referenceDate];
    NSDateComponents *componentsToAdd = [[NSDateComponents alloc] init];
    componentsToAdd.day = -1 * (ordinalityOfInput - 1);
    NSDate *startDate = [calendar dateByAddingComponents:componentsToAdd toDate:referenceDate options:0];
    NSInteger numDaysInWeek = [calendar maximumRangeOfUnit:NSWeekdayCalendarUnit].length;
    NSMutableArray *allDays = [NSMutableArray arrayWithCapacity:numDaysInWeek];
    NSDateComponents *curDayOffset = [[NSDateComponents alloc] init];
    for (int curDay=0; curDay < numDaysInWeek; curDay++) {
        curDayOffset.day = curDay;
        [allDays addObject:[calendar dateByAddingComponents:curDayOffset toDate:startDate options:0]];
    }
    return allDays;
}
-(NSArray*)所有日期包含日期:(NSDate*)参考日期{
NSCalendar*日历=[NSCalendar currentCalendar];
NSInteger ordinalityOfInput=[日历顺序功能:NSWeekdayCalendarUnit
inUnit:NSWeekCalendarUnit
forDate:referenceDate];
NSDateComponents*componentsToAdd=[[NSDateComponents alloc]init];
componentsToAdd.day=-1*(ordinalityOfInput-1);
NSDate*startDate=[calendar Date ByAddingComponents:Components StoAddToDate:referenceDate选项:0];
NSInteger numDaysInWeek=[calendar maximumRangeOfUnit:NSWeekdayCalendarUnit]。长度;
NSMUTABLEARRY*allDays=[NSMUTABLEARRY阵列容量:numDaysInWeek];
NSDateComponents*curDayOffset=[[NSDateComponents alloc]init];
对于(int curDay=0;curDay
周数代表什么?给定年份中的周数?不,不是。我正在创建一个计划,并希望将每个页面显示为周。我知道一些基本的NSDate和NSDate组件,我可以从NSDate组件获取周数,但现在我正在做相反的操作。从NSDate或周数获取一周中的所有天。有一年52周,所以在1-52年之间……所以……你是哪一年得到这些日期的?你认为一周中哪一天是一周中的第一天?,星期一是第一周,但您将在NSCalendar
setFirstWeekday:
中设置它,这与问题无关。周数表示什么?给定年份中的周?不,不是。我正在创建一个时间表,希望将每个页面显示为周。我知道一些基本的NSDate和NSDate组件,我可以从NSDat获取周经济因素,但现在我正在倒转。从一个星期或一个星期的数字中抽出一天的时间。一年有52个星期,所以在1-52之间:所以……你是哪一年得到这些日期的?你认为一周中哪一天是一周中的第一天?
并将其转换为NSComponents),星期一是第一周,但您将在NSCalendar
setFirstWe中进行设置