Swift 4
test en utilisant Xcode Version 9.2
-
combinant les deux réponses ci-dessus qui m'ont aidé
Utilisez la méthode suivante pour obtenir la chaîne par la différence entre deux dates l'idée est de localiser les mots semaines / jours / minutes par le format.
func getTimeComponentString(olderDate older: Date,newerDate newer: Date) -> (String?) {
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .full
let componentsLeftTime = Calendar.current.dateComponents([.minute , .hour , .day,.month, .weekOfMonth,.year], from: older, to: newer)
let year = componentsLeftTime.year ?? 0
if year > 0 {
formatter.allowedUnits = [.year]
return formatter.string(from: older, to: newer)
}
let month = componentsLeftTime.month ?? 0
if month > 0 {
formatter.allowedUnits = [.month]
return formatter.string(from: older, to: newer)
}
let weekOfMonth = componentsLeftTime.weekOfMonth ?? 0
if weekOfMonth > 0 {
formatter.allowedUnits = [.weekOfMonth]
return formatter.string(from: older, to: newer)
}
let day = componentsLeftTime.day ?? 0
if day > 0 {
formatter.allowedUnits = [.day]
return formatter.string(from: older, to: newer)
}
let hour = componentsLeftTime.hour ?? 0
if hour > 0 {
formatter.allowedUnits = [.hour]
return formatter.string(from: older, to: newer)
}
let minute = componentsLeftTime.minute ?? 0
if minute > 0 {
formatter.allowedUnits = [.minute]
return formatter.string(from: older, to: newer) ?? ""
}
return nil
}
Voici comment vous pouvez utiliser
let nowDate = Date()
let endDate = Date().addingTimeInterval(12345678)
let string = String.getTimeComponentString(olderDate: nowDate, newerDate: endDate)!
print(nowDate)
print(endDate)
print(string)
0 votes
Hey FormulaOne.... Veuillez consulter cette réponse stackoverflow.com/questions/27182023/…
0 votes
Il serait utile d'améliorer la question si vous expliquiez en quoi votre code actuel (qui est correct dans la mesure du possible) ne donne pas le résultat souhaité.
0 votes
A tout a sens car cela vous ferait gagner du temps de me trouver une réponse la prochaine fois! :)