2017-07-23 1 views
0

j'ai créé une fonction qui se comparent très bien deux dates et retour différence comme chaîneLe plus court « il y a le temps »

extension Date { 
    var shortTimeAgo: String { 
     let formatter = DateComponentsFormatter() 
     formatter.allowedUnits = [.year,.month,.weekOfMonth,.day,.hour,.minute,.second] 
     formatter.maximumUnitCount = 1 
     formatter.unitsStyle = .short 
     return formatter.string(from: self, to: Date()) 
    } 
} 

Mais il renvoie des valeurs comme « 35 sec », « 10 minutes » ou même « 2 jours 1 h "

Comment obtenir des valeurs encore plus courtes comme" 35s "," 10m "et juste" 2d "?

+0

Avez-vous lu la documentation des autres contants de 'UnitsStyle'? Avez-vous essayé les? – Willeke

+0

oui, l'option .short est la plus courte possible mais est encore trop longue;) –

+1

Avez-vous essayé 'abbreviated'? La documentation dit: Un style qui utilise l'orthographe la plus abrégée pour les unités. Le style abrégé représente l'orthographe la plus courte pour les valeurs unitaires. Par exemple, une heure et dix minutes sont affichées comme "1h 10m". – Willeke

Répondre

1

Essayez ce code -

extension Date { 
    var shortTimeAgo: String { 
     let formatter = DateComponentsFormatter() 
     formatter.allowedUnits = [.year,.month,.weekOfMonth,.day,.hour,.minute,.second] 
     formatter.maximumUnitCount = 1 
     formatter.unitsStyle = .abbreviated 
     return formatter.string(from: self, to: Date()) 
    } 
} 

Hope it helps!