swift 日期字符串处理

  • String类添加扩展方法
//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()

你可能感兴趣的:(swift 日期字符串处理)