NSDate 实现时间格式刚刚、几分钟前、几小时前、昨天、MM-dd HH:mm:ss


在微博、QQ 或者各种可以发帖的软件中可以发现 发帖时间根据当前时间显示不同的时间格式

( 刚刚、几分钟前、几小时前、昨天、MM-dd HH:mm:ss、 yyyy-MM-dd HH:mm:ss)


第一种方法: 

- (void)testDate:(NSString *)create_time

{

    // 当前时间

    NSDate *now = [NSDatedate];

    

    // 发帖时间

    NSDateFormatter *formatter = [[NSDateFormatteralloc]init];

    // 设置日期格式(y:,M:,d:,H:,m:,s:)

    formatter.dateFormat =@"yyyy-MM-dd HH:mm:ss";

    NSDate *create = [formatter dateFromString:create_time];

    NSTimeInterval delta = [now timeIntervalSinceDate:create];

}

 

把时间转化成固定的时间字符串格式, 然后 [now timeIntervalSinceDate:create] 获取当前时间与某一特定时间的时间差值,转化成多少秒 然后再根据多少秒 得到跟现在的时间对比 显示不同是时间样式

显然这种方式会让不少人恶心的


第二种: 

- (void)testDate:(NSString *)create_time

{

    // 日期格式化类

    NSDateFormatter *fmt = [[NSDateFormatteralloc]init];

    // 设置日期格式(y:,M:,d:,H:,m:,s:)

    fmt.dateFormat =@"yyyy-MM-dd HH:mm:ss";

    

    // 当前时间

    NSDate *now = [NSDatedate];

    // 发帖时间

    NSDate *create = [fmt dateFromString:create_time];

    

    XMGLog(@"%@", [nowdeltaFrom:create]);

    

    // 日历

    NSCalendar *calendar = [NSCalendarcurrentCalendar];

    

    // 比较时间

    NSCalendarUnit unit =NSCalendarUnitDay |NSCalendarUnitMonth |NSCalendarUnitYear |NSCalendarUnitHour |NSCalendarUnitMinute |NSCalendarUnitSecond;

    NSDateComponents *cmps = [calendar components:unit fromDate:create toDate:now options:0];

    

   NSLog(@"%@ %@", create, now);

   NSLog(@"%zd %zd %zd %zd %zd %zd", cmps.year, cmps.month, cmps.day, cmps.hour, cmps.minute, cmps.second);

    

// 获得NSDate的每一个元素

    NSInteger year = [calendar component:NSCalendarUnitYear fromDate:now];

    NSInteger month = [calendarcomponent:NSCalendarUnitMonthfromDate:now];

    NSInteger day = [calendarcomponent:NSCalendarUnitDayfromDate:now];

    NSDateComponents *cmps = [calendar components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:now];

    XMGLog(@"%zd %zd %zd", cmps.year, cmps.month, cmps.day);

}


在NSDate中有一个日历 可以很方便的解决这个问题


为了以后我们可以重用这个方法 首先我们先为NSDate 建一个分类

/**

 *  比较from self 的时间差值

 */

- (NSDateComponents *) deltaFrom:(NSDate *)from {

    

    // 日历

    NSCalendar *calender = [NSCalendarcurrentCalendar];

    

    // 比较时间

    NSCalendarUnit unit =NSCalendarUnitDay |NSCalendarUnitYear |NSCalendarUnitMonth |NSCalendarUnitHour |NSCalendarUnitMinute |NSCalendarUnitSecond;

    return [calender components:unit fromDate:from toDate:self options:0];

    

}


/**

 *  判断是否是今年

 */

- (BOOL)isThisYear {

    

    // 日历

    NSCalendar *calender = [NSCalendarcurrentCalendar];

    

    NSInteger nowYear = [calendercomponent:NSCalendarUnitYearfromDate:[NSDatedate]];

    NSInteger selfYear = [calendercomponent:NSCalendarUnitYearfromDate:self];

    

    return nowYear == selfYear;

    

}


/**

 *  判断是否是今天

 */

- (BOOL)isToday {

    

    // 日期格式化类

    NSDateFormatter *formatter = [[NSDateFormatteralloc]init];

    formatter.dateFormat = @"yyyy-MM-dd";

    

    NSString *nowString = [formatter stringFromDate:[NSDate date]];

    NSString *selfString = [formatter stringFromDate:self];

    

    // 判断当前日期传过来的日期是否是同一天

    return nowString == selfString;

    

}


/**

 *  判断是否是昨天

 */

- (BOOL)isYesterDay {

    

    // 日期格式化类把当前时间转化成固定的格式

    NSDateFormatter *formatter = [[NSDateFormatteralloc]init];

    formatter.dateFormat = @"yyyy-MM-dd";

    /**[formatter stringFromDate:[NSDate date]]把当前的时间格式转化成上面只有--日的时间字符串

     * formatter dateFromString: 再把上面的固定时间字符串改成 date 类型

     */

    NSDate *nowDate = [formatter dateFromString:[formatter stringFromDate:[NSDatedate]]];

    NSDate *selfDate = [formatter dateFromString:[formatter stringFromDate:self]];

    

    // 日历

    NSCalendar  *calender = [NSCalendarcurrentCalendar];

    

    NSDateComponents *components = [calendercomponents:NSCalendarUnitYear |NSCalendarUnitMonth | NSCalendarUnitDayfromDate:selfDatetoDate:nowDateoptions:0];

    

    //

    return components.year ==0 && components.month ==0 && components.day ==1;

    

}


然后在Model 中重写发帖时间的get 方法

- (NSString *)create_time {

    

    // 日期格式化类

    NSDateFormatter *formatter = [[NSDateFormatteralloc]init];

    formatter.dateFormat =@"yyyy-MM-dd HH:mm:ss";

    

    // 帖子的创建时间

    NSDate *create = [formatter dateFromString:_create_time];

    

    if (create.isThisYear) {//今年

        if (create.isToday) {//今天

            NSDateComponents *compoents = [[NSDatedate]deltaFrom:create];

            if (compoents.hour1) {

                return [NSStringstringWithFormat:@"%ld小时前",compoents.hour];

            } else if (compoents.minute >= 1) {

                return [NSStringstringWithFormat:@"%ld分钟前",compoents.minute];

            } else {

                return @"刚刚";

            }

            

        } else if (create.isYesterDay){//昨天

            formatter.dateFormat = @"昨天 HH:mm:ss";

            return [formatter stringFromDate:create];

        } else { //其他

            formatter.dateFormat = @"MM-dd HH:mm:ss";

            return [formatter stringFromDate:create];

        }

    } else { // 不是今年

        return_create_time;

    }

}



猜你喜欢

转载自blog.csdn.net/u014305730/article/details/50761757