持续创作,加速成长!这是我参与「掘金日新计划 · 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;
}
复制代码
/**
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;
}
复制代码