iOS 获取过去一段时间的月份

/ 0评 / 0

遇到一个需求,要获取前几个月的月份,并用这些时间数据去请求,刚好过了2018年,之前写的有点问题,于是就重新修改了方法,采用日历类来做。
来看获取上个月月份的代码,setMonth: 就是获取月份的关键,-1位上个月,1位下个月,以此类推

   NSDate *currentDate = [NSDate date];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM"];
    
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *lastMonthComps = [[NSDateComponents alloc] init];
    [lastMonthComps setMonth:-1];
    NSDate *newdate = [calendar dateByAddingComponents:lastMonthComps toDate:currentDate options:0];
    NSString *dateStr = [formatter stringFromDate:newdate];
    SRQLog(@"date str = %@", dateStr);

那么我这里要获取之前六个月的月份就可以这样写:

+ (NSMutableArray *)lastMonthArray{
    NSMutableArray *monthArray = [NSMutableArray array];
    NSDate *currentDate = [NSDate date];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM"];
    
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *lastMonthComps = [[NSDateComponents alloc] init];
    for (int i = 0; i < 6; i ++) {
        [lastMonthComps setMonth:-i];
        NSDate *newdate = [calendar dateByAddingComponents:lastMonthComps toDate:currentDate options:0];
        NSString *dateStr = [formatter stringFromDate:newdate];
        SRQLog(@"date str = %@", dateStr);
        DateModel *model = [[DateModel alloc] init];
        model.year = [[dateStr componentsSeparatedByString:@"-"].firstObject integerValue];
        model.month = [[dateStr componentsSeparatedByString:@"-"].lastObject integerValue];
        [monthArray addObject:model];
    }
    return monthArray;
}

评论已关闭。