目前我可以获得一周的开始日期和结束日期,但我想获得整个星期的日期并将其放入数组中。我用+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;
}