NSString的分类NSString+WMTimeTransform
1.根据时间戳获取时间字符串
/**
根据时间戳获取时间字符串.
@param timeStamp 时间戳
@param dateFormat 时间格式字符串
@retutn 传入的时间格式字符串形式的时间字符串 例如 HH:mm
*/
+ ( NSString *)wm_getTimeStringWithTimeStamp:(NSTimeInterval)timeStamp DateFormat:(NSString *)dateFormat;
//时间戳转换时间字符串
+ (NSString *)wm_getTimeStringWithTimeStamp:(NSTimeInterval)timeStamp DateFormat:(NSString *) dateFormat {
if(timeStamp > 140000000000) {//如果时间戳是毫秒,先转换为秒
timeStamp = timeStamp / 1000;
}
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:dateFormat];
NSDate *timeStampDate = [NSDate dateWithTimeIntervalSince1970:timeStamp];
NSString *timeStr = [formatter stringFromDate:timeStampDate];
return timeStr;
}
2.根据时间字符串获取时间戳
/**
根据时间字符串获取时间戳.
@attention 传入的时间字符串格式要与传入的时间格式完全一致
@param timeStr 时间字符串 例如:@"20190802133550" 或 @"2019年08月02日13时35分50秒"
@param dateFormat 时间格式字符串 对应格式:@"YYYYMMddHHmmss" 或 @"YYYY年MM月dd日HH时mm分ss秒"
@retutn 时间戳
*/
+ (NSString *)wm_getTimeStampWithStandardTimeStr:(NSString *)timeStr DateFormat:(NSString *)dateFormat;
//根据时间字符串获取时间戳
+ (NSString *)wm_getTimeStampWithStandardTimeStr:(NSString *)timeStr DateFormat:(NSString *)dateFormat {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:dateFormat];
NSDate *datestr = [dateFormatter dateFromString:timeStr];
// 时间转时间戳的方法:
NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[datestr timeIntervalSince1970]];
return timeSp;
}
3.仿微信会话列表时间显示
/**
仿微信会话列表时间显示
@param timeStamp 时间戳
@return 时间字符串
*/
+ (NSString *)wm_ChatListDisplayTimeWithTimeStamp:(NSTimeInterval)timeStamp;
//仿微信会话列表时间显示
+ (NSString *)wm_ChatListDisplayTimeWithTimeStamp:(NSTimeInterval)timeStamp {
if(timeStamp > 140000000000) {//如果时间戳是毫秒,先转换为秒
timeStamp = timeStamp / 1000;
}
//获取当前时间戳
NSTimeInterval nowTimeStamp = [[NSDate date]timeIntervalSince1970];
//时间差
double timeInterval = nowTimeStamp - timeStamp;
NSString * dateStr;//返回的时间字符串
//传入的时间戳转换为日期
NSDate * pastDate = [NSDate dateWithTimeIntervalSince1970:timeStamp];
NSDateFormatter * df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"HH:mm"];
//传入时间戳显示为HH:mm形式
NSString * HHmmStr = [df stringFromDate:pastDate];
[df setDateFormat:@"dd"];
//当前日期与传入的时间戳日期,显示为:天
NSInteger nowDay = [[df stringFromDate:[NSDate date]] integerValue];
NSInteger pastDay = [[df stringFromDate:pastDate] integerValue];
/**
先判断时间差distanceTime 再比对当前日期与传入时间戳日期值
*/
if (timeInterval < 60) {
//小于一分钟
dateStr = @"刚刚";
} else if (timeInterval <60*60) {
//时间小于一个小时
dateStr = [NSString stringWithFormat:@"%ld分钟前",(long)timeInterval/60];
} else if(timeInterval <24*60*60 && nowDay == pastDay) {
//时间差小于一天,并且当前日期 == 时间戳日期
dateStr = [NSString stringWithFormat:@"今天%@",HHmmStr];
} else if(timeInterval<24*60*60*2 && nowDay != pastDay) {
//时间差小于两天,并且当前日期 != 时间戳日期
if (nowDay - pastDay == 1 || (pastDay - nowDay > 10 && nowDay == 1)) {
dateStr = [NSString stringWithFormat:@"昨天%@",HHmmStr];
} else {
[df setDateFormat:@"MM/dd HH:mm"];
dateStr = [df stringFromDate:pastDate];
}
} else if(timeInterval <24*60*60*365) {
[df setDateFormat:@"MM/dd HH:mm"];
dateStr = [df stringFromDate:pastDate];
} else {
[df setDateFormat:@"yyyy/MM/dd HH:mm"];
dateStr = [df stringFromDate:pastDate];
}
return dateStr;
}
4.通过时间戳计算时间差(几分钟前,几小时前,几天前,几个月前,几年前)
/**
通过时间戳计算时间差(几分钟前,几小时前,几天前,几个月前,几年前)
@param timeStamp 时间戳
@return 时间差
*/
+ (NSString *)wm_TimeIntervalWithTimeStamp:(NSTimeInterval)timeStamp;
//通过时间戳计算时间差(几分钟前,几小时前,几天前,几个月前,几年前)
+ (NSString *)wm_TimeIntervalWithTimeStamp:(NSTimeInterval)timeStamp{
if(timeStamp > 140000000000) {//如果时间戳是毫秒,先转换为秒
timeStamp = timeStamp / 1000;
}
NSDate *pastDate = [NSDate dateWithTimeIntervalSince1970:timeStamp];
//时间差
NSTimeInterval timeInterval = -[pastDate timeIntervalSinceNow];
long temp = 0;
NSString *result = @"";
if (timeInterval < 60) {
result = [NSString stringWithFormat:@"刚刚"];
} else if((temp = timeInterval/60) < 60) {
result = [NSString stringWithFormat:@"%ld分钟前",temp];
} else if((temp = timeInterval/3600) < 24) {
result = [NSString stringWithFormat:@"%ld小时前",temp];
} else if((temp = timeInterval/3600/24) < 31) {
result = [NSString stringWithFormat:@"%ld天前",temp];
} else if((temp = timeInterval/3600/24/30) < 12) {
result = [NSString stringWithFormat:@"%ld个月前",temp];
} else {
temp = temp/12;
result = [NSString stringWithFormat:@"%ld年前",temp];
}
return result;
}
5.根据date获取星期
/**
根据date获取星期
@param inputDate 日期
@return 周几
*/
+ (NSString*)wm_getWeekDayWithDate:(NSDate *)inputDate;
//获取当前日期的星期
+ (NSString*)wm_getWeekDayWithDate:(NSDate *)inputDate {
NSArray *weekDays = [NSArray arrayWithObjects: [NSNull null], @"星期日", @"星期一", @"星期二", @"星期三", @"星期四", @"星期五", @"星期六", nil];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSTimeZone *timeZone = [[NSTimeZone alloc] initWithName:@"Asia/Shanghai"];
[calendar setTimeZone: timeZone];
NSCalendarUnit calendarUnit = NSCalendarUnitWeekday;
NSDateComponents *components = [calendar components:calendarUnit fromDate:inputDate];
return [weekDays objectAtIndex:components.weekday];
}
6.获取两个时间的天数差
/**
获取两个时间的天数差
@param firstDate 第一个时间
@param secondDate 第二个时间
@return 比较得出的天数差
*/
+ (NSString *)wm_getTwoDateInterval:(NSDate *)firstDate SecondDate:(NSDate *)secondDate;
//获取两个时间的天数差
+ (NSString *)wm_getTwoDateInterval:(NSDate *)firstDate SecondDate:(NSDate *)secondDate {
NSCalendar* clendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSCalendarUnit unitFlags = NSCalendarUnitYear | NSCalendarUnitMinute | NSCalendarUnitSecond | NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear;
NSDateComponents *interval = [clendar components:unitFlags fromDate:firstDate toDate:secondDate options:0];
NSInteger intervalDay = [interval day];
return [NSString stringWithFormat:@"%ld",intervalDay<0?-intervalDay:intervalDay];
}
7.获取date是当月的第几周
/**
获取date是当月的第几周
@param date 日期
@return 第几周
*/
+ (NSString *)wm_getWeekInMonthWithDate:(NSDate *)date;
//获取date是当月的第几周
+ (NSString *)wm_getWeekInMonthWithDate:(NSDate *)date {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger week = [calendar ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitMonth forDate:date];
return [NSString stringWithFormat:@"%ld",week];
}
8.获取date是当年的第几周
/**
获取date是当年的第几周
@param date 日期
@return 第几周
*/
+ (NSString *)wm_getWeekInYearWithDate:(NSDate *)date;
//获取date是当年的第几周
+ (NSString *)wm_getWeekInYearWithDate:(NSDate *)date {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger week = [calendar ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitYear forDate:date];
return [NSString stringWithFormat:@"%ld",week];
}
9.获取日期对应月的天数
/**
获取日期对应月的天数
@param date 日期
@return 天数
*/
+ (NSString *)wm_getNumberOfDaysInMonthWithDate:(NSDate *)date;
//获取日期对应月的天数
+ (NSString *)wm_getNumberOfDaysInMonthWithDate:(NSDate *)date {
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];//指定日历的算法
NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date];
return [NSString stringWithFormat:@"%ld",range.length];
}