所有NSDate的数组一周

Dav*_*vid 1 objective-c nsdate ios ios5

我想有一个函数,它需要一个星期的数字作为输入,并返回由此特定周产生的所有NSDates的数组.

像这样的东西:

-(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 */
Run Code Online (Sandbox Code Playgroud)

}

如何以简单的方式完成?

eva*_*ash 5

此解决方案完全依赖于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;
}
Run Code Online (Sandbox Code Playgroud)