最近呢,比较忙都没写新的文章。(其实是懒哈哈)
好的直接进入主题。闲聊私我、(害羞脸)
最近做一个节目的项目,然后节目回顾列表需要显示是多少天前的时间,然后遇到以下的问题。
首先需求描述:
节目1--20170817 20:55:00
今天是20170818 17:55:00
显示 --------------------- 一天前
我一开始用的是以下的方法:
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setFirstWeekday:2];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *fromDate = [dateFormatter dateFromString:model.begintime];//@"2017-08-17 20:55:00"
NSDate *toDate = [NSDate date];//获取当前时间
NSDateComponents *dayComponents = [gregorian components:NSDayCalendarUnit fromDate:fromDate toDate:toDate options:0];
return dayComponents.day;
// dayComponents.day 即为间隔的天数
然后会发现会有一个小问题。就是:
它这个是按24小时计算,不满24小时不算一天。
就是 我20170817 20:55:00 到 20170818 18:00:00不算满24小时,不算一天。我在APP上显示的是今天而不是1天前,可明明就是昨天的节目嘛。所有会有点现问题。
不过没关系,我把两个对比的的时间的时分秒设置为00:00:00,那么问题就解决了。
解决方法
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
[gregorian setFirstWeekday:2];
NSDate *fromDate;
NSDate *toDate;
[gregorian rangeOfUnit:NSCalendarUnitDay startDate:&fromDate interval:NULL forDate:[dateFormatter dateFromString:model.begintime]];//节目的开始时间
[gregorian rangeOfUnit:NSCalendarUnitDay startDate:&toDate interval:NULL forDate:[dateFormatter dateFromString:self.currenttime]];//当前时间
NSDateComponents *dayComponents = [gregorian components:NSCalendarUnitDay fromDate:fromDate toDate:toDate options:0];
NSString *daysago = [NSString stringWithFormat:@"%ld",(long)[dayComponents day]];
// daysago
// dayComponents day 即为间隔的天数
然后就欧了。问题就解决了。好了,写完下班,开始小周末。哈哈