300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > im中的定位消息 ios_仿微信的IM聊天时间显示格式(含iOS/Android/Web实现)[图文+源码]...

im中的定位消息 ios_仿微信的IM聊天时间显示格式(含iOS/Android/Web实现)[图文+源码]...

时间:2019-04-08 01:17:09

相关推荐

im中的定位消息 ios_仿微信的IM聊天时间显示格式(含iOS/Android/Web实现)[图文+源码]...

#import "TimeTool.h"

@implementationTimeTool

// 仿照微信的逻辑,显示一个人性化的时间字串

+ (NSString*)getTimeStringAutoShort2:(NSDate*)dt mustIncludeTime:(BOOL)includeTime{

NSString*ret = nil;

NSCalendar*calendar = [NSCalendarcurrentCalendar];

// 当前时间

NSDate*currentDate = [NSDatedate];

NSDateComponents*curComponents = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitWeekdayfromDate:currentDate];

NSIntegercurrentYear=[curComponents year];

NSIntegercurrentMonth=[curComponents month];

NSIntegercurrentDay=[curComponents day];

// 目标判断时间

NSDateComponents*srcComponents = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitWeekdayfromDate:dt];

NSIntegersrcYear=[srcComponents year];

NSIntegersrcMonth=[srcComponents month];

NSIntegersrcDay=[srcComponents day];

// 要额外显示的时间分钟

NSString*timeExtraStr = (includeTime?[TimeTool getTimeString:dt format:@" HH:mm"]:@"");

// 当年

if(currentYear == srcYear) {

longcurrentTimestamp = [TimeTool getIOSTimeStamp_l:currentDate];

longsrcTimestamp = [TimeTool getIOSTimeStamp_l:dt];

// 相差时间(单位:秒)

longdelta = currentTimestamp - srcTimestamp;

// 当天(月份和日期一致才是)

if(currentMonth == srcMonth && currentDay == srcDay) {

// 时间相差60秒以内

if(delta < 60)

ret = @"刚刚";

// 否则当天其它时间段的,直接显示“时:分”的形式

else

ret = [TimeTool getTimeString:dt format:@"HH:mm"];

}

// 当年 && 当天之外的时间(即昨天及以前的时间)

else{

// 昨天(以“现在”的时候为基准-1天)

NSDate*yesterdayDate = [NSDatedate];

yesterdayDate = [NSDatedateWithTimeInterval:-24*60*60 sinceDate:yesterdayDate];

NSDateComponents*yesterdayComponents = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDayfromDate:yesterdayDate];

NSIntegeryesterdayMonth=[yesterdayComponents month];

NSIntegeryesterdayDay=[yesterdayComponents day];

// 前天(以“现在”的时候为基准-2天)

NSDate*beforeYesterdayDate = [NSDatedate];

beforeYesterdayDate = [NSDatedateWithTimeInterval:-48*60*60 sinceDate:beforeYesterdayDate];

NSDateComponents*beforeYesterdayComponents = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDayfromDate:beforeYesterdayDate];

NSIntegerbeforeYesterdayMonth=[beforeYesterdayComponents month];

NSIntegerbeforeYesterdayDay=[beforeYesterdayComponents day];

// 用目标日期的“月”和“天”跟上方计算出来的“昨天”进行比较,是最为准确的(如果用时间戳差值

// 的形式,是不准确的,比如:现在时刻是02月22日1:00、而srcDate是02月21日23:00,

// 这两者间只相差2小时,直接用“delta/3600” > 24小时来判断是否昨天,就完全是扯蛋的逻辑了)

if(srcMonth == yesterdayMonth && srcDay == yesterdayDay)

ret = [NSStringstringWithFormat:@"昨天%@", timeExtraStr];// -1d

// “前天”判断逻辑同上

elseif(srcMonth == beforeYesterdayMonth && srcDay == beforeYesterdayDay)

ret = [NSStringstringWithFormat:@"前天%@", timeExtraStr];// -2d

else{

// 跟当前时间相差的小时数

longdeltaHour = (delta/3600);

// 如果小于或等 7*24小时就显示星期几

if(deltaHour <= 7*24){

NSArray *weekdayAry = [NSArrayarrayWithObjects:@"星期日", @"星期一", @"星期二", @"星期三", @"星期四", @"星期五", @"星期六", nil];

// 取出的星期数:1表示星期天,2表示星期一,3表示星期二。。。。 6表示星期五,7表示星期六

NSIntegersrcWeekday=[srcComponents weekday];

// 取出当前是星期几

NSString*weedayDesc = [weekdayAry objectAtIndex:(srcWeekday-1)];

ret = [NSStringstringWithFormat:@"%@%@", weedayDesc, timeExtraStr];

}

// 否则直接显示完整日期时间

else

ret = [NSStringstringWithFormat:@"%@%@", [TimeTool getTimeString:dt format:@"yyyy/M/d"], timeExtraStr];

}

}

}

// 往年

else{

ret = [NSStringstringWithFormat:@"%@%@", [TimeTool getTimeString:dt format:@"yyyy/M/d"], timeExtraStr];

}

returnret;

}

+ (NSString*)getTimeString:(NSDate*)dt format:(NSString*)fmt{

NSDateFormatter* format = [[NSDateFormatteralloc] init];

[format setDateFormat:fmt];

return[format stringFromDate:(dt==nil?[TimeTool getIOSDefaultDate]:dt)];

}

+ (NSTimeInterval) getIOSTimeStamp:(NSDate*)dat{

NSTimeIntervala = [dat timeIntervalSince1970];

returna;

}

+ (long) getIOSTimeStamp_l:(NSDate*)dat{

return[[NSNumbernumberWithDouble:[TimeTool getIOSTimeStamp:dat]] longValue];

}

+ (NSDate*)getIOSDefaultDate

{

return [NSDate date];

}

@end

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。