如果您只想要 Date 的 Time Ago 扩展,请转到答案底部?
我将向您展示一个示例,只是为了在几秒钟之前以及之后我将展示您的扩展更新。
注意:如果需要,您可以直接使用 Pase 中的日期:
if let pastDate = (object?["createdAt"] as? Date) {
cell.TimeAgo.text = pastDate.timeAgoDisplay()
}
斯威夫特 5.1
如何使用 Swift 5.1 显示几秒钟前的示例:
自iOS13以来苹果引入了一个新类RelativeDateTimeFormatter
extension Date {
func timeAgoDisplay() -> String {
let formatter = RelativeDateTimeFormatter()
formatter.unitsStyle = .full
return formatter.localizedString(for: self, relativeTo: Date())
}
}
该类将允许您根据您的语言获取时间前的字符串。它会根据您的时间间隔自动选择正确的时间单位,这是一个示例:
|--------------------------|------------------|
| Time interval in seconds | Display |
|--------------------------|------------------|
| -6 | 6 seconds ago |
| -60 | 1 minute ago |
| -600 | 10 minutes ago |
| -6000 | 1 hour ago |
| -60000 | 16 hours ago |
|--------------------------|------------------|
您会注意到它会自动为您处理复数形式。
Swift 3 或 Swift 4
如何使用 Swift 3 或 Swift 4 获取几秒钟前的示例:
首先:要获得前几秒,我们需要检查我们是否有一分钟或更少,要获得当前日期减去一分钟,您可以这样写:
let minuteAgo = calendar.date(byAdding: .minute, value: -1, to: Date())!
第二:现在比较两个日期! (对于您的延期,我们自行替换 yourDate)并获取这两个日期之间的差异。
if (minuteAgo < yourDate) {
let diff = Calendar.current.dateComponents([.second], from: yourDate, to: Date()).second ?? 0
print("\(diff) sec ago")
}
就是这样,现在可以打印之前的时间了!
所以你的扩展是这样的:
(这是获取时间的简单扩展)
extension Date {
func timeAgoDisplay() -> String {
let calendar = Calendar.current
let minuteAgo = calendar.date(byAdding: .minute, value: -1, to: Date())!
let hourAgo = calendar.date(byAdding: .hour, value: -1, to: Date())!
let dayAgo = calendar.date(byAdding: .day, value: -1, to: Date())!
let weekAgo = calendar.date(byAdding: .day, value: -7, to: Date())!
if minuteAgo < self {
let diff = Calendar.current.dateComponents([.second], from: self, to: Date()).second ?? 0
return "\(diff) sec ago"
} else if hourAgo < self {
let diff = Calendar.current.dateComponents([.minute], from: self, to: Date()).minute ?? 0
return "\(diff) min ago"
} else if dayAgo < self {
let diff = Calendar.current.dateComponents([.hour], from: self, to: Date()).hour ?? 0
return "\(diff) hrs ago"
} else if weekAgo < self {
let diff = Calendar.current.dateComponents([.day], from: self, to: Date()).day ?? 0
return "\(diff) days ago"
}
let diff = Calendar.current.dateComponents([.weekOfYear], from: self, to: Date()).weekOfYear ?? 0
return "\(diff) weeks ago"
}
}
要使用它,这很简单:
var now = Date()
now.timeAgoDisplay()