1. 创建日期转换分类
//
// Date+
//
import Foundation
extension Date{
/// 将格式的字符串转换成日期
static func fromData(string: String) ->Date?{
let df = DateFormatter()
= Locale(identifier: "en")
= "EEE MMM dd HH:mm:ss zzz yyyy"
return (from: string)
}
/**
返回当前日期多描述信息
刚刚(一分钟内)
x分钟前(一小时内)
x小时前(当天)
昨天 HH:mm(昨天)
MM-dd HH:mm(一年内)
yyyy-MM-dd HH:mm(更早期)
*/
var dateDescription: String{
//取出当前日历 - 提供了大量的日历相关的操作函数
let calendar =
//处理今天的日期
if (self) {
let delta = Int(Date().timeIntervalSince(self))
if delta < 60 {
return "刚刚"
}
if delta < 3600{
return "\(delta/60) 分钟前"
}
return "\(delta/3600) 小时前"
}
//非今天的日期
var fmt = " HH:mm"
if (self){
fmt = "昨天" + fmt
}else{
fmt = "MM-dd" + fmt
//直接获取 “年”的数值
let comps = ([.year], from: self, to: Date())
if let year = , year > 0 {
fmt = "yyyy-" + fmt
}
}
//根据格式字符串生成描述字符串
let df = DateFormatter()
= fmt
= Locale(identifier: "en")
return (from: self)
}
}
2. 测试方法
override func viewDidLoad() {
()
//目标: 特殊格式的字符串
//步骤
//1.建立 ‘日期’对象
//2.根据日期对象,计算显示描述字符
let str = "Mon Jul 25 16:41:43 +0800 2022"
print((string: "Mon Jul 26 06:41:43 +0800 2022")?.dateDescription)
print((string: "Mon Jul 26 10:03:01 +0800 2022")?.dateDescription)
print((string: "Mon Jul 26 10:06:01 +0800 2022")?.dateDescription)
print((string: "Mon Jul 26 00:00:02 +0800 2022")?.dateDescription)
print((string: "Mon Jul 25 16:41:43 +0800 2022")?.dateDescription)
print((string: "Mon Jul 24 16:41:43 +0800 2022")?.dateDescription)
print((string: "Mon May 24 16:41:43 +0800 2022")?.dateDescription)
print((string: "Mon May 28 16:41:43 +0800 2021")?.dateDescription)
}
3. 输出结果
Optional("3 小时前")
Optional("3 分钟前")
Optional("刚刚")
Optional("10 小时前")
Optional("昨天 16:41")
Optional("07-24 16:41")
Optional("05-24 16:41")
Optional("2021-05-28 16:41")