iOS根据日期判断是刚刚、几分钟前、几小时前等的代码片段

参考github源码中的一个格式化字符串的源码,

是NSDate的一个扩展方法:

/**
 * Given the reference date and return a pretty date string to show
 *
 * @param refrence the date to refrence
 *
 * @return a pretty date string, like "just now", "1 minute ago", "2 weeks ago", etc
 */
- (NSString *)prettyDateWithReference:(NSDate *)reference {
  NSString *suffix = @"ago";
  
  float different = [reference timeIntervalSinceDate:self];
  if (different < 0) {
    different = -different;
    suffix = @"from now";
  }
  
  // days = different / (24 * 60 * 60), take the floor value
  float dayDifferent = floor(different / 86400);
  
  int days   = (int)dayDifferent;
  int weeks  = (int)ceil(dayDifferent / 7);
  int months = (int)ceil(dayDifferent / 30);
  int years  = (int)ceil(dayDifferent / 365);
  
  // It belongs to today
  if (dayDifferent <= 0) {
    // lower than 60 seconds
    if (different < 60) {
      return @"just now";
    }
    
    // lower than 120 seconds => one minute and lower than 60 seconds
    if (different < 120) {
      return [NSString stringWithFormat:@"1 minute %@", suffix];
    }
    
    // lower than 60 minutes
    if (different < 60 * 60) {
      return [NSString stringWithFormat:@"%d minutes %@", (int)floor(different / 60), suffix];
    }
    
    // lower than 60 * 2 minutes => one hour and lower than 60 minutes
    if (different < 7200) {
      return [NSString stringWithFormat:@"1 hour %@", suffix];
    }
    
    // lower than one day
    if (different < 86400) {
      return [NSString stringWithFormat:@"%d hours %@", (int)floor(different / 3600), suffix];
    }
  }
  // lower than one week
  else if (days < 7) {
    return [NSString stringWithFormat:@"%d day%@ %@", days, days == 1 ? @"" : @"s", suffix];
  }
  // lager than one week but lower than a month
  else if (weeks < 4) {
    return [NSString stringWithFormat:@"%d week%@ %@", weeks, weeks == 1 ? @"" : @"s", suffix];
  }
  // lager than a month and lower than a year
  else if (months < 12) {
    return [NSString stringWithFormat:@"%d month%@ %@", months, months == 1 ? @"" : @"s", suffix];
  }
  // lager than a year
  else {
    return [NSString stringWithFormat:@"%d year%@ %@", years, years == 1 ? @"" : @"s", suffix];
  }
  
  return self.description;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值