获取当前周的日期范围,用于数据处理,看这周有没有数据,没有则添加之类的功能。
例如现在日期:2019-04-26,则返回结果为:2019.04.22 - 2019.04.28
/**
当前周的日期范围
@return 结果字符串
*/
- (NSString *)currentScopeWeek {
// 默认周一为第一天,1.周日 2.周一 3.周二 4.周三 5.周四 6.周五 7.周六
return [self currentScopeWeek:2 dateFormat:@"YYYY.MM.dd"];
}
/**
当前周的日期范围
@param firstWeekday 星期起始日
@param dateFormat 日期格式
@return 结果字符串
*/
- (NSString *)currentScopeWeek:(NSUInteger)firstWeekday dateFormat:(NSString *)dateFormat
{
NSDate *nowDate = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Shanghai"]];
// 1.周日 2.周一 3.周二 4.周三 5.周四 6.周五 7.周六
calendar.firstWeekday = firstWeekday;
// 日历单元
unsigned unitFlag = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday;
unsigned unitNewFlag = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents *nowComponents = [calendar components:unitFlag fromDate:nowDate];
// 获取今天是周几,需要用来计算
NSInteger weekDay = [nowComponents weekday];
// 获取今天是几号,需要用来计算
NSInteger day = [nowComponents day];
// 计算今天与本周第一天的间隔天数
NSInteger countDays = 0;
// 特殊情况,本周第一天firstWeekday比当前星期weekDay小的,要回退7天
if (calendar.firstWeekday > weekDay) {
countDays = 7 + (weekDay - calendar.firstWeekday);
} else {
countDays = weekDay - calendar.firstWeekday;
}
// 获取这周的第一天日期
NSDateComponents *firstComponents = [calendar components:unitNewFlag fromDate:nowDate];
[firstComponents setDay:day - countDays];
NSDate *firstDate = [calendar dateFromComponents:firstComponents];
// 获取这周的最后一天日期
NSDateComponents *lastComponents = firstComponents;
[lastComponents setDay:firstComponents.day + 6];
NSDate *lastDate = [calendar dateFromComponents:lastComponents];
// 输出
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:dateFormat];
NSString *firstDay = [formatter stringFromDate:firstDate];
NSString *lastDay = [formatter stringFromDate:lastDate];
return [NSString stringWithFormat:@"%@ - %@",firstDay,lastDay];
}