Paste
Pasted as Swift by formatters ( 6 years ago )
let periodFormatter: DateComponentsFormatter = {
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.minute, .hour]
formatter.maximumUnitCount = 1
formatter.unitsStyle = .short
return formatter
}()
let relativeFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.doesRelativeDateFormatting = true
formatter.timeStyle = .short
formatter.dateStyle = .short
return formatter
}()
let weekdayFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "EEEE @ h:mm a"
return formatter
}()
let monthFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "MMM d @ h:mm:a"
return formatter
}()
let yearFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .none
return formatter
}()
func string(from date: Date) -> String {
let now = Date()
guard date <= now else { return "Future" }
let timeInterval = now.timeIntervalSince(date)
let days = Calendar.current.dateComponents([.day], from: date, to: now).day ?? 0
switch (timeInterval, days) {
case (0..<120, _):
return "Just Now"
case (120..<300, _):
return "A Few Minutes"
case (300..<(10 * 60 * 60), _):
return periodFormatter.string(from: date, to: now).map { $0 + " ago" } ?? ""
case (_, 0..<2):
return relativeFormatter.string(from: date)
case (_, 2..<7):
return weekdayFormatter.string(from: date)
case (_, 7..<364):
return monthFormatter.string(from: date)
default:
return yearFormatter.string(from: date)
}
}
let now = Date()
let fewMinutes = Date().addingTimeInterval(-160)
let sixMins = Date().addingTimeInterval(-360)
let twoHours = Date().addingTimeInterval(-60 * 60 * 2)
let elevenHours = Date().addingTimeInterval(-60 * 60 * 11)
let yesterday = Date().addingTimeInterval(-60 * 60 * 24)
let fourDays = Date().addingTimeInterval(-60 * 60 * 24 * 4)
let tenDays = Date().addingTimeInterval(-60 * 60 * 24 * 10)
let oneYear = Date().addingTimeInterval(-60 * 60 * 24 * 400)
string(from: now)
string(from: fewMinutes)
string(from: sixMins)
string(from: twoHours)
string(from: elevenHours)
string(from: yesterday)
string(from: fourDays)
string(from: tenDays)
string(from: oneYear)
Revise this Paste