Page 1 sur 1
changer une date de JJ/MM/AAAA à AAAA/MM/JJ
Posté : ven. 19 janv. 2018 08:14
par yohanb767
Bonjour à tous !
je ne parviens pas à trouver une fonction qui me permette de convertir une date de format JJ/MM/AAAA à AAAA/MM/JJ
je sais comment faire l'inverse avec la fonction _DateTimeFormat
mais dans le sens inverse aucune idée
Bonne journée à tous
Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ
Posté : ven. 19 janv. 2018 08:32
par Tlem
Bonjour.
Vous pourriez tout simplement utiliser StringSplit() pour décomposer votre date en trois parties, puis de remettre en forme tel que vous le désirez.
Genre :
Code : Tout sélectionner
$date = "dd/mm/aaaa"
Local $adate = StringSplit($date, "/")
Local $sDate = $aDate[3] & "/" & $aDate[2] & "/" & $aDate[1]
MsgBox(32, "Date aaaa/mm/dd", $sDate)
Le code ci-dessous a été écrit sur le smartphone, donc il peut subsister des erreurs. ^^
Envoyé de mon appareil mobile en utilisant Tapatalk
Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ
Posté : ven. 19 janv. 2018 10:18
par yohanb767
Merci Thierry ,
je n'avais pas pensé à ça , j'étais parti plus sur une fonction plus précise
mais cela m'avance bien quand même
merci
Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ
Posté : ven. 19 janv. 2018 12:19
par Tlem
Hé bien dans ce cas, utilisez "la fonction précise" : _Convert_ddmmyyyy_To_yyyymmdd() ^^
$date = "19/01/2018"MsgBox(32, "Date aaaa/mm/dd", _Convert_ddmmyyyy_To_yyyymmdd
($Date, "/"))Func _Convert_ddmmyyyy_To_yyyymmdd
($szDate, $szSeparator="") Local $sdate = StringRegExpReplace($szDate, "[ /.///-]", "") If StringLen($sdate) <> 8 Then Return SetError (1, 0, "") Return StringRight($sdate, 4) & $szSeparator & StringMid($sdate, 3, 2) & $szSeparator & StringLeft($sdate, 2)EndFunc
Et pour encore plus de "précision", la même avec un check de la date :
#include <Date.au3>$date = "19/01/2018" ; date valideMsgBox(32, "Date aaaa/mm/dd", _Convert_ddmmyyyy_To_yyyymmdd
($Date, "/"))$date = "19/21/2018" ; Erreur sur le moisMsgBox(32, "Date aaaa/mm/dd", _Convert_ddmmyyyy_To_yyyymmdd
($Date, "/"))$date = "1/1/2018" ; Erreur sur le formatMsgBox(32, "Date aaaa/mm/dd", _Convert_ddmmyyyy_To_yyyymmdd
($Date, "/"))Func _Convert_ddmmyyyy_To_yyyymmdd
($szDate, $szSeparator="") Local $sdate = StringRegExpReplace($szDate, "[ /.///-]", "") ; Supprime les caractères de séparation de date If StringLen($sdate) <> 8 Then Return SetError (1, 0, $szDate & " => Date Size Error") ; Vérifie qu'on a bien 8 chiffres ; Vérifie la validité de la date If Not _DateIsValid(StringRight($sdate, 4) & "/" & StringMid($sdate, 3, 2) & "/" & StringLeft($sdate, 2)) Then Return SetError (1, 0, $szDate & " => Input Date Error") ; Retourne la date formatée avec le séparateur choisit. Return StringRight($sdate, 4) & $szSeparator & StringMid($sdate, 3, 2) & $szSeparator & StringLeft($sdate, 2)EndFunc J'ai volontairement simplifié la gestion des erreurs, mais l'idée est là !!!
Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ
Posté : ven. 19 janv. 2018 14:26
par mikell
Rhaalala ces gens qui lisent pas le fichier d'aide
D'après l'exemple n°2 pour StringRegExpReplace
Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ
Posté : ven. 19 janv. 2018 21:12
par Tlem
Bonsoir.
Même si cela présente peu d’intérêt
et que la vitesse d’exécution du code est d'un pouillème de pouilème plus rapide (oui je sais, c'est ridicule, mais bon) voici la même chose sans utiliser les expressions régulières. ^^
Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ
Posté : ven. 19 janv. 2018 21:41
par mikell
Bin disons que l'expression régulière a l'avantage de fonctionner pour une date qui ferait partie d'une phrase, par exemple, comme dans l'exemple du fichier d'aide. C'est pas rien
Maintenant à choisir, j'aime autant ton code du post n°2 (avis personnel of corse)
Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ
Posté : ven. 19 janv. 2018 22:46
par Tlem
Soit, mais en théorie, lorsque l'on souhaite faire un traitement sur une date, on évite de rajouter d'autres choses. ^^
D'autant que l'argument n'est valable que si et seulement si il n'y a pas d'autre date ou chiffre dans la chaine à traiter.
Les fonctions du message 4 ont le mérite traiter et retourner des dates avec différents séparateurs.
Cela permet de traiter une date du genre 19/01/2018 ou 19.01.2018 ou 19-01-2018 ou encore 19 01 2018 et de retourner la date sous la forme AAAAMMJJ avec ou sans séparateur de son choix.
Pour couronner le tout la deuxième fonction vérifie la validité de la date de sortie.
PS: Concernant les temps de traitements, j'ai rayé mon commentaire qui est faux. De toute façon, a moins de faire des millions de traitements en boucle, l'écart est tellement infime qu'en parler était ridicule de ma part.

Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ
Posté : ven. 19 janv. 2018 23:00
par orax
Tlem a écrit :Les fonctions du message 4 ont le mérite traiter et retourner des dates avec différents séparateurs.
Avec StringRegExpReplace, on pourrait faire...
Code : Tout sélectionner
MsgBox(0, "", StringRegExpReplace("19-01-2018", '(\d{2})(.?)(\d{2})(.?)(\d{4})', "$5$2$3$4$1"))
Re: changer une date de JJ/MM/AAAA à AAAA/MM/JJ
Posté : sam. 20 janv. 2018 09:59
par Tlem
Heuuu, oui mais non !
Dans l'exemple que tu donne, tu récupère le séparateur de l'input que tu réutilise sur l'output !!! C'est pas vraiment ça le but. ^^
Bon après il faut peu de changement pour adapter, mais ce ne sera pas sur une seule ligne.
Et puis, il n'y a pas de gestion d'erreur et pas de contrôle sur la validité de la date.
