Bonjour,
Quelqu’un sais comment on fait pour les dates récupérées par internet en format json ? J’ai mis string et ça marche , mais je sais pas comment les mettre en format correcte et surtout je pense qu’elle ne son pas vu comme des dates mais une string ??
Bonjour,
Ce n’est pas genant de les garder au format string, car il faudra forcement le faire pour l’affichage. Tu peux changer le format si tu veux.
voila une fonction
func formatDatePost(dateToChange: String)-> String {
let formatter = DateFormatter() formatter.locale = Locale(identifier: "FR-fr") // format comme tu le souhaites ici formatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss" datePost = formatter.date(from: dateToChange) return formatter.string(from: datePost)
}
Il manque l’initialisation au debut la ligne. Il faut rajouter « let »
let datePost = formatter.date(from: dateToChange)
Ce genre de fonction que je suis suceptible d’utiliser à plusiuers endroits dans mon code je les mets dans dans un fichier que j’appelle Functions.
Quand tu as besoin de l’appeler tu fais formatDatePost(dateToChange: « TA DATE ») à l’endroit où tu veux la mettre.
Par exemple dans un champ texte en swiftUI:
Text( formatDatePost(dateToChange: « TA DATE »))
ok merci beaucoup je vais tester ca tout de suite
HStack {
// Text("\(item.id) ")
// .font(.footnote)
// Spacer()
Text("Date:")
Text(item.date)
Text(formatDatePost(dateToChange: "\(item.date)"))
/
ca me donne une erreur fatal a l’exécution
Text(formatDatePost(dateToChange: item.date))
je n’arrive pas a changer comme je veux ?
Salut Eric,
Dans mon dernier projet (sous IUKIT) j’ai eu à gérer des dates dans ma BDD et les ensuite les afficher. J’ai rajouté des fonctions dans un extension de la class String pour les convertir au format que je souhaitais. Je stocke en String en les convertissant au format ISO8601 (pour les trier plus facilement lors de la réponse de l’API) et les affiche au format que je souhaitais ( « Mercredi 23 février 2022 à 15h00 »).
Voici les détails de mes fonctions si ça peut te servir :
extension Date {
/// Transforms the date to the desired display format -> String
func dateToString() -> String {
let strDate = self.dateToStrDay()
let strHour = self.dateToStrHour()
return "\(strDate) à \(strHour)"
}
/// Convert the time to the desired format HH:mm -> String
func dateToStrHour() -> String {
let hourFormatter = DateFormatter()
hourFormatter.locale = Locale(identifier: "fr_FR")
hourFormatter.dateStyle = DateFormatter.Style.none
hourFormatter.timeStyle = DateFormatter.Style.short
hourFormatter.dateFormat = "HH:mm"
let strHour = hourFormatter.string(from: self)
return strHour
}
/// convert the date to the desired format -> String
func dateToStrDay() -> String {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "fr_FR")
dateFormatter.dateStyle = DateFormatter.Style.full
dateFormatter.timeStyle = DateFormatter.Style.none
let strDate = dateFormatter.string(from: self)
return strDate
}
}
extension String {
/// Transforms String to the desired date format -> Date
func strToDate() -> Date {
let returnedDate: Date
let dateFormatter = ISO8601DateFormatter()
if let date = dateFormatter.date(from: self) {
returnedDate = date
} else {
returnedDate = Date()
}
return returnedDate
}
/// Transforms String to the date format for DB -> Date
func strDateForDisplay() -> String {
let returnedStrDate : String
let formatter = ISO8601DateFormatter()
if let IsoDate = formatter.date(from: self) {
returnedStrDate = IsoDate.dateToString()
} else {
returnedStrDate = self
}
return returnedStrDate
}
}
// pour affichage depuis un String
let strDate = maDateEnString.strDateForDisplay()
// utilisation comme date (dans mon picker par exemple)
let date = maDateEnString.strToDate()
// pour affichage depuis le format Date
let date = maDateFromatDate.dateToString()
Cette page te permet de voir les formats disponibles : ios - Date Format in Swift - Stack Overflow
En espérant que ça puisse t’aider
Bon courage
Arnaud
merci je vais essayer, toujours pas réussi a faire se que je voulais avec ses dates
Salut, que veux-tu faires précisément ?
Directus me renvoie la date en string :
2022-03-20T13:00:00
Impossible de reconvertir en date ou en string formatée ?
Si si le DateFormatter a été créé pour !
let date = Date()
let formate = date.getFormattedDate(format: "yyyy-MM-dd HH:mm:ss") // Set output formate
extension Date {
func getFormattedDate(format: String) -> String {
let dateformat = DateFormatter()
dateformat.dateFormat = format
return dateformat.string(from: self)
}
}
Tu peux éditer le format de :
"yyyy-MM-dd HH:mm:ss"
Ok voilà pour être plus clair. Je vous met un playground screen j’ai une date en format string , variable str , comment la passer en vrai date , la formater en un format date normale Francais ?
J’ai essayer avec tout se que vous m’avez indiquer sans succès . Alors monter moi à base de ma variable str comment faire ?
Salut @EricS,
Qu’est-ce que pour toi, une date française normale ?
Car samedi 26 février 2022 à 09:54 est une date française valide.
Bonjour,
Ceci ?
import SwiftUI
let str = "2022-03-20T 13:00:00"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
let dateFromString = dateFormatter.date(from: str)
print("\(String(describing: dateFromString))")
Cordialement,
Nicolas