iOS小技能: 时间处理(案例:构造退款单号、获取最近30天的数据)

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

引言

iOS 获取时间的应用场景: 报表的时间筛选

在这里插入图片描述

I 时间获取

1.1 获取上个月

  • 用法
        self.viewModel.multipleSwitchCellTableViewCellModel.MonthlyDateStr = [QCT_Common strdate4lastMonthlyStrYYMM];

复制代码
  • strdate4lastMonthlyStrYYMM
/**
 获取上个月份字符串
 */
+ (NSString *)strdate4lastMonthlyStrYYMM{
    
    
    
    
    NSDate *currentDate = [NSDate date];
        
        NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    
        NSDateComponents *lastMonthComps = [[NSDateComponents alloc] init];
    //    [lastMonthComps setYear:1]; // year = 1表示1年后的时间 year = -1为1年前的日期,month day 类推
        [lastMonthComps setMonth:-1];
        NSDate *newdate = [calendar dateByAddingComponents:lastMonthComps toDate:currentDate options:0];
    
    

    NSString *tmpbirthday = @"";
    tmpbirthday  = [QCT_Common date4YYMM:newdate];
            NSLog(@"date str = %@", tmpbirthday);
    //    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    //        [formatter setDateFormat:@"yyyy-MM"];
        //        NSString *dateStr = [formatter stringFromDate:newdate];

    return tmpbirthday;
}


复制代码

1.2 获取本月

/**
 获取当前月份字符串
 */
+ (NSString *)strdate4TodaydateMonthlyStrYYMM{
    
    
    
    NSDate *lastDay =[NSDate date];//
    
//    NSDate *lastDay = [NSDate dateWithTimeInterval:-24*60*60 sinceDate:[NSDate date]];//前一天

    
    

    NSString *tmpbirthday = @"";

    tmpbirthday  = [QCT_Common date4YYMM:lastDay];
    
    return tmpbirthday;
    
}

复制代码

1.3 获取前一天

+ (NSString *)strdate4lastDayYYMMDD{
    
    NSDate *lastDay = [NSDate dateWithTimeInterval:-24*60*60 sinceDate:[NSDate date]];//前一天
    
    

    NSString *tmpbirthday = @"";

    tmpbirthday  = [QCT_Common date4YYMMDD:lastDay];
    
    return tmpbirthday;

    
}

复制代码

II 案例:

2.1 构造退款单号

商户退款单号(商户退款单号,32个字符内、可包含字母,确保在商户系统唯一。同个退款单号多次请求,平台当一个单处理,只会退一次款。如果出现退款不成功,请采用原退款单号重新发起,避免出现重复退款。)

商户退款单号(out_refund_no):yyMMddHHmmss + xxxxxx(sid)+ 递增序号(隔天重置)

- (NSString *)out_refund_no{
    
    
    NSMutableString *str = [[NSMutableString alloc]initWithString: [QCT_Common getyyMMddHHmmss4TodayTime]];
    [str appendString:xxx.id];   
    [str appendString:QCTSession.shareQCTSession.snid];
    

    
    
    return str;
    
    
    
    
}

复制代码
  • snid(递增序号(隔天重置))

/**
 yyMMddHHmmss + xxxxxx(6位sid)+ 5位序号

 */
- (NSString *)snid{
    
    
    // 先从偏好获取对象,如果不存在就进行存储
    
    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
    NSMutableDictionary *k_sndi_keydic = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] dataForKey:k_sndi_key]];
    
    
     
    NSString *str =@"00000";
    
    

    
    NSString *todayStr =     [QCT_Common  date4YYMMDD:[NSDate date]];
    
                              
                              
                              
                              
                              

    if([k_sndi_keydic.allKeys containsObject:k_sndi_date_key]){
        
        
        
        NSString *lastday = k_sndi_keydic[k_sndi_date_key];
        
        
        str = [[NSMutableString alloc]initWithString: k_sndi_keydic[k_sndi_key]];
        
        
        
        

        
        if([todayStr isEqualToString:lastday]){
            
            int d = [str intValue]+1;
            
            
            NSNumber *t = [NSNumber numberWithInt:d];
            
            
            
            
            str =  [QCT_Common addComplementspaces:t.description count:5 placeholder:@"0" isdirectionRight:NO];//
            
            
            
        }else{
            
            
            
            str = @"00000";
            [k_sndi_keydic setValue:todayStr forKey:k_sndi_date_key];


            
            
            
        }
        
        
        
        
        
        
        
        
    }else{
        
        k_sndi_keydic = [NSMutableDictionary dictionary];
        
        
        [k_sndi_keydic setValue:todayStr forKey:k_sndi_date_key];
        
        str = @"00000";
        
        
        
        
        
    }
                              
    
    
    [k_sndi_keydic setValue:str forKey:k_sndi_key];
    
    
    
                              NSData *data  = [NSKeyedArchiver archivedDataWithRootObject: k_sndi_keydic];
                              
                              
                              
                              
                              [user setValue:data forKey:k_sndi_key];
                              
                              [user synchronize];

    
    
    
    NSLog(@"str:%@",FMSTR(@"%@",str));//02022
    
    
    
    return  str;
    
}


复制代码

kunnan.blog.csdn.net/article/det…

/**
 
 
 str: 原字符串
 count: 补齐到第几位
 
 placeholder: 补齐的符号

 isdirectionRight: 是否往右补齐
 */
+ (NSString*)addComplementspaces:(NSString*)str count:(NSInteger)count  placeholder:(NSString*)placeholder isdirectionRight:(BOOL)isdirectionRight{
    
    
    
    NSLog(@"addComplementspacesstr:%@",FMSTR(@"%@",str));//02022

    
    if (str.length>=count) {
        
        return str;
        
    }
    
    
    
    NSMutableString *tmp = [NSMutableString new];
    
    if(isdirectionRight){
        
        tmp = [[NSMutableString alloc]initWithString:str];// 右补齐
        
        
    }
    
    
    NSInteger tmpcount = count -str.length;
    
    for (int i =0; i< tmpcount; i++) {
        
        [tmp appendString:placeholder];// 补齐
        
        
    }
    
    if(!isdirectionRight){
        [tmp appendString:str];//  往左补齐

    }
    
    NSLog(@"addComplementspacesstr:%@",FMSTR(@"%@",tmp.description));//02022
    

    return tmp.description;
    
}


复制代码

2.2 获取最近30天的数据

  • 用法
                    NSInteger day  = [QCT_Common contrastTimeBackDayWithStartDate:weakSelf.filterViewModel.timeModel.startStr endDate:weakSelf.filterViewModel.timeModel.endStr];
                    NSLog(@"day: %ld",(long)day);
                    
                    
                    if (day > 29) {
                        [weakSelf showHUDMessage:QCTLocal(@"time_interval_should_not_exceed_30_days")];
                        return;
                    }

复制代码
  • 工具方法
/**
 计算两个时间的间隔(天)
 
 @param start 开始时间
 @param end 结束时间
 @return 间隔时间
 */
+ (NSInteger)contrastTimeBackDayWithStartDate:(NSString *)start endDate:(NSString *)end
{
    NSTimeInterval time = [self contrastTimeWithyyyyMMddStartDate:start endDate:end];
    NSInteger minute,second,hour,day;
    second=(NSInteger)time%1000;
    minute = (NSInteger)(time/60)%60;
    hour = (NSInteger)(time/3600)%24;
    day = (time/3600/24);
    return day;
}

/**
 计算两个时间的间隔(毫秒)
 
 @param start 开始时间
 @param end 结束时间
 @return 间隔时间
 */
+ (NSTimeInterval)contrastTimeWithyyyyMMddStartDate:(NSString *)start endDate:(NSString *)end
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];

    
    NSDate *startDate = [dateFormatter dateFromString:start];
    NSDate *endDate = [dateFormatter dateFromString:end];
    NSTimeInterval time = [endDate timeIntervalSinceDate:startDate];
    return time;
}


复制代码
  • 数据过滤: 获取最近7天的数据
        // 数据过滤:  获取最近7天的数据
        NSMutableString *str = [[NSMutableString alloc]initWithString: [QCT_Common get4TodayTimeWithDateFormat:@"yyyy-MM-dd HH:mm:ss"]];
        
        
        NSMutableArray *tmp = [NSMutableArray array];

        for (QCTReceiptDetailModel *obj in tmparr) {
            
            

            NSInteger day  = [QCT_Common contrastTimeBackDayWithStartDate:obj.completeTime endDate:str DateFormat:@"yyyy-MM-dd HH:mm:ss"];//  endDate 大
            
            
            
            
            NSLog(@"day: %ld",(long)day);

            if (day > 6) {
                                
            }else{
                [tmp addObject:obj];

                
            }

            
            

            
        }
        
/**
     计算两个时间的间隔(天)
     
     @param start 开始时间
     @param end 结束时间
     @return 间隔时间
     */
    + (NSInteger)contrastTimeBackDayWithStartDate:(NSString *)start endDate:(NSString *)end DateFormat:(NSString*)Format
    {
        
        NSTimeInterval time = [self contrastTimeWithStartDate:start endDate:end dateFormatter:Format];
        
        
        
        NSInteger minute,second,hour,day;
        second=(NSInteger)time%1000;
        minute = (NSInteger)(time/60)%60;
        hour = (NSInteger)(time/3600)%24;
        day = (time/3600/24);
        return day;
    }

    /**
     计算两个时间的间隔(毫秒)
     
     @param start 开始时间
     @param end 结束时间
     @return 间隔时间
     */
    + (NSTimeInterval)contrastTimeWithStartDate:(NSString *)start endDate:(NSString *)end dateFormatter:(NSString*)Formatter
    {
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    //    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
        
        [dateFormatter setDateFormat:Formatter];
        
        
        
        NSDate *startDate = [dateFormatter dateFromString:start];
        NSDate *endDate = [dateFormatter dateFromString:end];
        NSTimeInterval time = [endDate timeIntervalSinceDate:startDate];
        return time;
    }


复制代码

2.3 时间格式化

blog.csdn.net/z929118967/…

猜你喜欢

转载自juejin.im/post/7106303506293719077