In Swift5, we have RelativeDateTimeFormatter
Prior to Swift5:
I\'m trying to convert time to time ago, what i wanna do is:
from 1
You need to add this date extension in your helper class or any in swift file. Swift 4.2 . if you want in swift 3 just uncomment the commented line and comment the next line.
And call the method as follow:
let dateText = Date().offsetFrom(date: yourDate!)
yourDate is date that to be change
////MARK: *************** Extension Date ***************
extension Date{
func convertToString(validDateFormatter:String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = validDateFormatter //"dd MMM yyyy" //yyyy-mm-dd hh:mm
//return dateFormatter.stringFromDate(self)
return dateFormatter.string(from: self as Date)
}
func yearsFrom(date:Date) -> Int{
// return NSCalendar.currentCalendar.components(.Year, fromDate: date, toDate: self, options: []).year
// let calendar = NSCalendar.current
// let components = Calendar.current.dateComponents([.year], from: date, to: self as Date)
return Calendar.current.dateComponents([.year], from: date, to: self).year!
}
func monthsFrom(date:Date) -> Int{
// return NSCalendar.currentCalendar.components(.Month, fromDate: date, toDate: self, options: []).month
return Calendar.current.dateComponents([.month], from: date as Date, to: self).month!
}
func weeksFrom(date:Date) -> Int{
//return NSCalendar.currentCalendar.components(.WeekOfYear, fromDate: date, toDate: self, options: []).weekOfYear
return Calendar.current.dateComponents([.weekOfYear], from: date, to: self).weekOfYear!
}
func daysFrom(date:Date) -> Int{
// return NSCalendar.currentCalendar.components(.Day, fromDate: date, toDate: self, options: []).day
return Calendar.current.dateComponents([.day], from: date, to: self).day!
}
func hoursFrom(date:Date) -> Int{
// return NSCalendar.currentCalendar.components(.Hour, fromDate: date, toDate: self, options: []).hour
return Calendar.current.dateComponents([.hour], from: date, to: self).hour!
}
func minutesFrom(date:Date) -> Int{
// return NSCalendar.currentCalendar.components(.Minute, fromDate: date, toDate: self, options: []).minute
return Calendar.current.dateComponents([.minute], from: date, to: self).minute!
}
func secondsFrom(date:Date) -> Int{
// return NSCalendar.currentCalendar.components(.Second, fromDate: date, toDate: self, options: []).second
return Calendar.current.dateComponents([.second], from: date, to: self).second!
}
func offsetFrom(date:Date) -> String
{
if yearsFrom(date: date) > 0 {
return "\(yearsFrom(date: date))y"
}
if monthsFrom(date: date) > 0 {
return "\(monthsFrom(date: date))M"
}
if weeksFrom(date: date) > 0{
return "\(weeksFrom(date: date))w"
}
if daysFrom(date: date) > 0 {
return "\(daysFrom(date: date))d"
}
if hoursFrom(date: date) > 0 {
return "\(hoursFrom(date: date))h"
}
if minutesFrom(date: date) > 0 {
return "\(minutesFrom(date: date))m"
}
if secondsFrom(date: date) > 0 {
return "\(secondsFrom(date: date))s"
}
return ""
}
}