//MARK: 生成相对日期时间
extension String{
func relativeTimeStr(formatStr: String = "YYYY-MM-dd HH:mm:ss") -> String {
//字符串转Date
let formatter = DateFormatter()
formatter.dateFormat = formateStr
let date = formatter.date(from: self) ?? Date()
//分解日期
let calendarComponents = Calendar.current.dateComponents([.year,.month,.hour,.day,.hour,.minute], from: date)
let year = calendarComponents.year ?? 0
let month = calendarComponents.month ?? 0
let day = calendarComponents.day ?? 0
let hour = calendarComponents.hour ?? 0
let minute = calendarComponents.minute ?? 0
//时间间隔
let curentYear = Calendar.current.dateComponents([.year], from: Date()).year ?? 0
let minuteGap = Calendar.current.dateComponents([.minute], from: date,to: Date()).minute ?? 0
let hourGap = Calendar.current.dateComponents([.hour], from: date, to: Date()).hour ?? 0
//返回时间信息
if Calendar.current.isDateInToday(date){
if minuteGap < 5{
return "刚刚"
}else if hourGap < 1{
return "\(minuteGap)分钟前"
}else{
return "\(hourGap)小时前"
}
}else if Calendar.current.isDateInYesterday(date){
return String.init(format: "昨天 %02d:%02d", arguments: [hour,minute])
}else if year == curentYear{
return String.init(format: "%02d-%02d %02d:%02d", arguments: [month,day,hour,minute])
}else{
return "\(year)-\(month)-\(day) \(hour):\(minute)"
}
}
}
- 用法很简单,字符串直接调用relativeTimeStr方法。
- 如果有不同的日期格式化规则,给formatStr传相应的规则即可。
- 有问题欢迎指正。
let dateStr = "2018-08-01 18:50:30"
let dateTip = dateStr.relativeTimeStr()
网友评论