In Swift5, we have RelativeDateTimeFormatter
Prior to Swift5:
I\'m trying to convert time to time ago, what i wanna do is:
from 1
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