iOS根据日期计算天数

最近呢,比较忙都没写新的文章。(其实是懒哈哈)

好的直接进入主题。闲聊私我、(害羞脸)

最近做一个节目的项目,然后节目回顾列表需要显示是多少天前的时间,然后遇到以下的问题。

首先需求描述:
节目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  即为间隔的天数

然后就欧了。问题就解决了。好了,写完下班,开始小周末。哈哈

你可能感兴趣的:(iOS根据日期计算天数)