NSDate 时间戳

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];
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值