[Func] Validation d'une date
Posté : dim. 13 avr. 2008 13:15
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
$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)