[Func] Validation d'une date

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

[Func] Validation d'une date

#1

Message par ani »

Code : Tout sélectionner

Func ValidationDate($iJJMMAAAA)
; Nom.............: ValidationDate
; Description.....: Corrige et valide la date encodé
; Syntaxe.........: validationDate($iJJMMAAAA)
; Paramètres......: iJJMMAAAA   - 
; Valeur.retourné.: Succés - Renvoie la valeur .
;
; Auteur ........: Ani
; Création .....: 13 avril 2008
; Distribué .....: 13 avril 2008
; Modifié........:
; Version........: 0.0.0.1 a
; Groupe.........: Autoit-fr
    Local $JJM = "", $JJMM = "1", $AAAA = "", $MM = "", $JJ
    Local $ML[7] = ["01", "03", "05", "07", "08", "10", "12"]
    Local $MC[5] = ["02", "04", "06", "09", "11"]
    Local $Separator[6] = [".",",","/","\",":","-"]
    Local $err = "", $Separatorx
    
    For $x = 0 to UBound($Separator) -1
        If StringInStr($iJJMMAAAA,$Separator[$x]) <> 0 Then
            $Separatorx = $Separator[$x]
        EndIf
    Next
    
    If StringInStr($iJJMMAAAA,$Separatorx) <> 0 Then
        $split = StringSplit($iJJMMAAAA,$Separatorx)
        $AAAA = $split[3]
        $MM = $split[2]
        $JJ = $split[1]
    Else
        $AAAA = StringRight($iJJMMAAAA, 4)
        $MM = StringRight(StringReplace($iJJMMAAAA, $AAAA, ""), 2)
        $JJ = StringReplace(StringReplace($iJJMMAAAA, $AAAA, ""), $MM, "")
    EndIf

    $err &=  isYearBissextile($AAAA)
    
    If ($AAAA < @YEAR) Then
        $err &= @CRLF & "Année encodé erronée =" & $AAAA & @CRLF
        $AAAA = @YEAR
        $err &= "Mise à jour ... Année en court validée =" & $AAAA & @CRLF
    EndIf
    
    If Not ($MM <= $ML[6]) Then
        $err &= "Mois encodé erroné =" & $MM & @CRLF
        $MM = 12
        $err &= "Mise à jour ... Validation du mois =" & $MM & @CRLF
    EndIf

    For $i = 0 To UBound($MC) - 1
        If ($MM = $MC[$i]) Then
            $JJM = 30
        EndIf
    Next
    For $j = 0 To UBound($ML) - 1
        If ($MM = $ML[$j]) Then
            $JJM = 31
        EndIf
    Next
    If ($MM = $MC[0]) Then
        Dim $Modulo = $AAAA / 4
        If StringIsDigit($Modulo) = 0 Then
            $JJM = 28
        Else
            $JJM = 29
        EndIf
    EndIf
    
    If Not ($JJ <= $JJM) Then
        $err &= "Jour encodé erroné =" & $JJ & @CRLF
        $JJ = $JJM
        $err &= "Mise à jour ... Validation du Jour =" & $JJ & @CRLF
    EndIf

    $iJJMMAAAA = $JJ & "/" & $MM & "/" & $AAAA
    ConsoleWrite(@CRLF & $err & @CRLF & $iJJMMAAAA & @CRLF)
    Return $iJJMMAAAA
EndFunc   ;==>ValidationDate

Func isYearBissextile($iNumber)
    Local $Modulo4 = $iNumber / 4, $b = ""
    If StringIsDigit($Modulo4) = 0 Then
        $b = $iNumber & " n'est pas une annnée bissextile" & @CRLF
    Else
        $b = $iNumber & " est une année bissextile" & @CRLF
    EndIf
    Return $b
EndFunc   ;==>isYearBissextile
 
La variable $iJJMMAAAA est composé de 3 autres variables $JJ & $MM & $AAAA
$JJ = Jour ~ ($iJJMM <= $ijj <= $IJJM)
$JJM = Jour Maximume
$JJMM = jour Mois Minimume
La variable $MM = Mois sera décomposé en deux variables $ML & $MC
$ML = Mois Long (31 jours) (01,03,05,07,08,10,12)
$MC = Mois Court (30 jours) (02,04,06,09,11)
$AAAA = Année + vérifié si c'est année bissextile.

Exemple d'utilisation
ValidationDate("02012007")
renvoie
2007 n'est pas une annnée bissextile
Année encodé erronée =2007
Mise à jour ... Année en court validée =2008
02/01/2008

ValidationDate("30022008")
renvoie
2008 est une année bissextile
Jour encodé erroné =30
Mise à jour ... Validation du Jour =29
29/02/2008

ValidationDate("35032009")
renvoie
2009 n'est pas une annnée bissextile
Jour encodé erroné =35
Mise à jour ... Validation du Jour =31
31/03/2009

Idem avec les séparateurs (voir tableau separator)
Exemple d'utilisation
ValidationDate("32/06/2012")
renvoie
2012 est une année bissextile
Jour encodé erroné =32
Mise à jour ... Validation du Jour =30
30/06/2012


merci d'avance pour vos commentaire .
(Ce script se verra améliorer)
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

Re: [Ex] Validation d'une date

#2

Message par tolf »

Tu peux remplacer ceci :

Code : Tout sélectionner

For $i = 0 To UBound($MC) - 1
    If ($MM = $MC[$i]) Then
        $JJM = 30
    EndIf
Next
For $j = 0 To UBound($ML) - 1
    If ($MM = $ML[$j]) Then
        $JJM = 31
    EndIf
Next
par cela :

Code : Tout sélectionner

For $i = 0 To UBound($MC) - 1
    If ($MM = $MC[$i]) Then
        $JJM = 30
        Exitloop
    EndIf
Next
If $JJM <> 30 Then $JJM = 31
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [Ex] Validation d'une date

#3

Message par ani »

ok tolf je prend note,
mais je pense retiré cette exemple, il n'est pas tout a fait correct.
me faudrai un coup de pouce pour les @error ou seterror.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [Ex] Validation d'une date

#4

Message par ani »

Après relecture de l'aide, y a une fonction qui y ressemble :
- Include = Date
- Fonction = _DateIsValid

Donc :(
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [Ex] Validation d'une date

#5

Message par timmalos »

Je déplace, ceci etant une fonction et non un exemple :wink:

Bravo quand meme ani
Répondre