我怎样才能得到一个NSArray来包含本周的每个日期



目前我可以获得一周的开始日期和结束日期,但我想获得整个星期的日期并将其放入数组中。我用+1来计算日期,但当有跨月时,它会返回错误的结果。

这是我的代码:

-(NSArray *) getWorkWeekDays:(NSDate *)date {
    NSCalendar *gregorian = [[NSCalendar alloc]        
    initWithCalendarIdentifier:NSGregorianCalendar];
    NSArray *period = [self getWorkWeekPeriod:date];//This function will return the begin and  end date of week based on the "date" parameter. return 2 Object
    NSMutableArray *weekDays = [[NSMutableArray alloc] init];
    NSInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit |    
    NSWeekdayCalendarUnit |
    NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    NSDateComponents *bgnComps = [gregorian components:unitFlags fromDate:period[0]]
    int bgnDay = [bgnComps day];
    NSString *firstDay = [NSString stringWithFormat:@"%d",bgnDay];
    [weekDays addObject:firstDay];
    for (int i = 1; i <= 6 ;i++) {
        [ bgnComps setDay :([ bgnComps day ]  +  1 )];
        int nextDay = [bgnComps day];
        NSString *day = [NSString stringWithFormat:@"%d",nextDay];
        [weekDays addObject:day];
    }
    return weekDays;} 

//在这种情况下,当我把2013/11/25作为开始日期时,我会得到2013年11月25日2013年11月26日2013/11/272013/11/282013年11月29日2013年11月30日2013/11/31<---这是一个非常错误的结果。。。。有什么建议吗?谢谢

此代码用当前星期中每天的开始时间填充一个带有NSDate对象的数组

NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *beginningOfThisWeek;
NSDate *beginningOfNextWeek;
NSTimeInterval durationOfWeek;
[calendar rangeOfUnit:NSWeekCalendarUnit
            startDate:&beginningOfThisWeek
             interval:&durationOfWeek
              forDate:now];
beginningOfNextWeek = [beginningOfThisWeek dateByAddingTimeInterval:durationOfWeek];

NSDate *date = beginningOfThisWeek;
NSMutableArray *dateArray = [@[] mutableCopy];
while (![beginningOfNextWeek compare:date]  == NSOrderedSame) {
    [dateArray addObject:date];
    NSDateComponents *comps = [calendar components:NSUIntegerMax fromDate:date];
    comps.day +=1;
    date = [calendar dateFromComponents:comps];
}

代码中的问题源于这样一个事实:使用NSStrings表示日期,尽管使用NSDateComponents,但不会将它们转换为日期对象,而是直接转换为字符串。

如果您希望用字符串表示日期,则应该使用NSDateFormatter


或者,如果你觉得for循环更舒服:

NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *beginningOfThisWeek;
NSTimeInterval durationOfWeek;
[calendar rangeOfUnit:NSWeekCalendarUnit
            startDate:&beginningOfThisWeek
             interval:&durationOfWeek
              forDate:now];

NSMutableArray *dateArray = [@[] mutableCopy];
NSDateComponents *comps = [calendar components:NSUIntegerMax fromDate:beginningOfThisWeek];
for (NSUInteger i = 0; i < 7; ++i) {
    [dateArray addObject:[calendar dateFromComponents:comps]];
    ++comps.day;
}

最新更新