美文网首页
iOS 获取这周的日期范围

iOS 获取这周的日期范围

作者: CarrySniper | 来源:发表于2019-04-26 15:38 被阅读0次

获取当前周的日期范围,用于数据处理,看这周有没有数据,没有则添加之类的功能。

例如现在日期:2019-04-26,则返回结果为:2019.04.22 - 2019.04.28
image.png
/**
 当前周的日期范围

 @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];
}

相关文章

网友评论

      本文标题:iOS 获取这周的日期范围

      本文链接:https://www.haomeiwen.com/subject/tdxqnqtx.html