Swift convert time to time ago

前端 未结 13 1363
一个人的身影
一个人的身影 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条回答
  •  清酒与你
    2020-12-24 02:30

    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 ""
    
    }
    
    }
    

提交回复
热议问题