这个算法大概是这样的
1若是大于等于3个连续的日期,则“【开始天】至【结束天】”,如“周一至周三”
周一、周日不算连续
2若小于3个连续的日期,或者日期是间断的,则将所有天通过分隔符“、”按顺序拼接,如“周一、周三、周四”,“周二、周三”,“周一、周六、周日”
但是返回的是一个数组,如1101110 就要显示 周一二 周四-周六
自己写了一个算法如下
//week @[@(YES),@(NO),@(YES),@(YES),@(NO),@(YES),@(YES)]
- (void)calculete:(NSArray *)week
{
NSMutableString *timeRange = [NSMutableString string];
NSMutableString *succsiveDay =[NSMutableString string];
NSInteger successStart = 0;
NSInteger successEnd = 0;
for (NSInteger i=0; i<week.count; i++) {
if (![week[i] boolValue]) {
successEnd = i-1;
if (succsiveDay.length >= 3) {
[timeRange appendFormat:@"周%@至周%@ ",self.weeks[successStart],self.weeks[successEnd]];
succsiveDay = [NSMutableString stringWithString:@""];
}
else{
switch (succsiveDay.length) {
case 0:
break;
case 1:
{
NSString *str = timeRange.length>0?[NSString stringWithFormat:@",周%@",self.weeks[successEnd]]:[NSString stringWithFormat:@"周%@",self.weeks[successEnd]];
[timeRange appendString:str];
}
break;
case 2:{
NSString *str = timeRange.length>0?[NSString stringWithFormat:@",周%@%@",self.weeks[successStart],self.weeks[successEnd]]:[NSString stringWithFormat:@"周%@%@",self.weeks[successStart],self.weeks[successEnd]];
[timeRange appendString:str];
}
break;
default:
break;
}
succsiveDay = [NSMutableString stringWithString:@""];
}
successStart = i+1;
}
else{
[succsiveDay appendString:self.weeks[i]];
if (i == week.count-1) {
NSString *str = (timeRange.length > 0)?[NSString stringWithFormat:@",周%@%@ ",self.weeks[successStart],self.weeks[week.count-1]]:[NSMutableString stringWithFormat:@"周%@至周%@ ",self.weeks[successStart],self.weeks[week.count-1]];
[timeRange appendString:str];
}
}
NSLog(@"%@",timeRange);
}
}