当前时间显示

调用

NSLog(@"%@",[self formateDate:@"2016-05-13 17:30" withFormate:@"YYYY-MM-dd HH:mm"]);

实现

/**
   和当前时间比较
    1)1分钟以内       显示 :   刚刚
    2)1小时以内       显示 :   X分钟前
    3)今天或者昨天     显示 :   今天 09:30   昨天 09:30
    4) 今年           显示 :   09月12日
    5) 大于本年        显示 :   2013/09/09
*/

- (NSString *)formateDate:(NSString *)dateString withFormate:(NSString *) formate
{
    @try {
        //实例化一个NSDateFormatter对象
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:formate];

        NSDate * nowDate = [NSDate date];

        //  将需要转换的时间转换成 NSDate 对象
        NSDate * needFormatDate = [dateFormatter dateFromString:dateString];
        //  取当前时间和转换时间两个日期对象的时间间隔
        //  这里的NSTimeInterval 并不是对象,是基本型,其实是double类型,是由c定义的:  typedef double NSTimeInterval;
        NSTimeInterval time = [nowDate timeIntervalSinceDate:needFormatDate];

        // 再然后,把间隔的秒数折算成天数和小时数:
        NSString *dateStr = @"";

        if (time <= 60) {  // 1分钟以内的
            dateStr = @"刚刚";
        }else if(time <= 60*60){  //  一个小时以内的

            int mins = time/60;
            dateStr = [NSString stringWithFormat:@"%d分钟前",mins];

        }else if(time <= 60*60*24*2){   // 在两天内的

            [dateFormatter setDateFormat:@"YYYY/MM/dd"];
            NSString * need_yMd = [dateFormatter stringFromDate:needFormatDate];
            NSString *now_yMd = [dateFormatter stringFromDate:nowDate];

            [dateFormatter setDateFormat:@"HH:mm"];
            if ([need_yMd isEqualToString:now_yMd]) {
                // 在同一天
                dateStr = [NSString stringWithFormat:@"今天 %@",[dateFormatter stringFromDate:needFormatDate]];
            }else{
                //  昨天
                dateStr = [NSString stringWithFormat:@"昨天 %@",[dateFormatter stringFromDate:needFormatDate]];
            }
        }else {

            [dateFormatter setDateFormat:@"yyyy"];
            NSString * yearStr = [dateFormatter stringFromDate:needFormatDate];
            NSString *nowYear = [dateFormatter stringFromDate:nowDate];

            if ([yearStr isEqualToString:nowYear]) {
                //  在同一年
                [dateFormatter setDateFormat:@"MM月dd日"];
                dateStr = [dateFormatter stringFromDate:needFormatDate];
            }else{
                [dateFormatter setDateFormat:@"yyyy/MM/dd"];
                dateStr = [dateFormatter stringFromDate:needFormatDate];
            }
        }
        return dateStr;
    }
    @catch (NSException *exception) {
        return @"";
    }
}

更准确的方法

调用方法:

  [self formateDate:@"2016-05-30 21:57:46" withFormat:@"YYYY-MM-dd HH:mm:ss"];

实现:

- (void)formateDate:(NSString *)dateString withFormat:(NSString *) formate{

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:formate];
    NSDate * nowDate = [NSDate date];
    NSDate * needFormatDate = [dateFormatter dateFromString:dateString];

    NSTimeInterval secondsPerDay = 24 * 60 * 60;
    NSDate *yearsterDay =  [[NSDate alloc] initWithTimeIntervalSinceNow:-secondsPerDay];
    NSTimeInterval thirdPerDay = 48 * 60 * 60;
    NSDate * qian = [[NSDate alloc] initWithTimeIntervalSinceNow:-thirdPerDay];
    //假设这是你要比较的date:NSDate *yourDate = ……
    //日历
    NSCalendar* calendar = [NSCalendar currentCalendar];
    unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
    NSDateComponents* comp1 = [calendar components:unitFlags fromDate:needFormatDate];
    NSDateComponents* comp2 = [calendar components:unitFlags fromDate:yearsterDay];
    NSDateComponents * comp3 = [calendar components:unitFlags fromDate:qian];

    if ( comp1.year == comp2.year && comp1.month == comp2.month && comp1.day == comp2.day) {
        NSLog(@"昨天");
    }
    if (comp1.year == comp3.year && comp1.month == comp3.month && comp1.day == comp3.day) {
        NSLog(@"前天");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值