Swift convert time to time ago

前端 未结 13 1324
一个人的身影
一个人的身影 2020-12-24 02:14

In Swift5, we have RelativeDateTimeFormatter

Prior to Swift5:


I\'m trying to convert time to time ago, what i wanna do is:

from 1

13条回答
  •  旧时难觅i
    2020-12-24 02:34

    My needs are simpler, either "now" or "x ago"

    Since iOS 8 you can use (NS)DateComponentsFormatter

    func getElapsedInterval() -> String {
    
        let formatter = DateComponentsFormatter()
        formatter.allowedUnits = [.minute, .hour, .day, .month, .year]
        formatter.unitsStyle = .abbreviated
        formatter.zeroFormattingBehavior = .dropAll
        formatter.maximumUnitCount = 1
    
        var dateString: String?
    
        if self.timeIntervalSince(Date()) > -60*5 {
            dateString = NSLocalizedString("now", comment: "")
        } else {
            dateString = String.init(format: NSLocalizedString("%@ ago", comment: ""), locale: .current, formatter.string(from: self, to: Date())!)
        }
    
        return dateString ?? ""
    }
    

    e.g.

    var date = Date.init(timeIntervalSinceNow: -60)
    print(date.getElapsedInterval())
    date = Date.init(timeIntervalSinceNow: -60*10)
    print(date.getElapsedInterval())
    date = Date.init(timeIntervalSinceNow: -60*60)
    print(date.getElapsedInterval())
    date = Date.init(timeIntervalSinceNow: -60*60*24)
    print(date.getElapsedInterval())
    date = Date.init(timeIntervalSinceNow: -60*60*24*30)
    print(date.getElapsedInterval())
    date = Date.init(timeIntervalSinceNow: -60*60*24*31*12)
    print(date.getElapsedInterval())
    

    now
    10m ago
    1h ago
    1d ago
    1mo ago
    1y ago

提交回复
热议问题