Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.

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

Your Name: Code Language: