
A ma connaissance, pas de fonction autoit renvoyant le jour de semaine d'une date donnée.
Je me mets donc à l'oeuvre, pour une date donnée (XXIème siècle, uniquement)
Soit l'énoncé n'est pas bon, soit tu n'as pas regardé la doc !Returns the weekdaynumber for a given date.
Code : Tout sélectionner
#include<Date.au3>
; #INDEX# =======================================================================================================================
; Title .........: FnRetourJourSemaine
; AutoIt Version: 3.2.8++
; Language: English
; Description ...: On a souvent besoin d'identifier les jours de semaine dans
; un code pour gérer des paramètres, dans le traitement des données, hebdomadaire/weekend
; Author ........: martinbrait
; ===============================================================================================================================
; #CONSTANTS# ===================================================================================================================
;Global Const $UN_EXEMPLE = 1 ; Text format
; ===============================================================================================================================
;==============================================================================================================================
; ===============================================================================================================================
; #NO_DOC_FUNCTION# =============================================================================================================
; Not working/documented/implimented at this time
; ===============================================================================================================================
;
; ===============================================================================================================================
; #CURRENT# =====================================================================================================================
;JourDeCetteDate
;EstUnJourOuvre
; #FUNCTION# ====================================================================================================================
; Name...........: JourDeCetteDate
; Description ...: ;INDIQUE UN JOUR DE SEMAINE, D'UNE DATE POUR LE XXIème siècle UNIQUEMENT
; Syntax.........: JourDeCetteDate($DateDonnee)
; Parameters ....: $DateDonnee, au type anglais ou français, string
; Return values .: En cas de réussite, retourne un integer 0 à 6 correspondant au jour de la semaine
; Author ........: martinbrait
; Modified.......:
; Remarks .......: 2000 à 2999
; ;Envoyer en paramètre une date complète dont l'année est à extraire.
; Related .......:
; Link ..........;
; Example .......; Yes
;~ $JourChoisi="16/10/2014"
;~ MsgBox(64,"CONTROLE",JourDeCetteDate($JourChoisi))
; ===============================================================================================================================
Func JourDeCetteDate($DateDonnee)
$Calc = Partiel1($DateDonnee)+ Partiel2($DateDonnee)+ Partiel3($DateDonnee)
;MsgBox(64,"LE JOUR THEORIQUE EST: ",Mod ( $Calc,7))
Return Mod($Calc,7)
EndFunc
; #FUNCTION# ====================================================================================================================
; Name...........: EstUnJourOuvre
; Description ...: ;INDIQUE PAR BOOLEEN LE JOUR OUVRE
; Syntax.........: EstUnJourOuvre($DateDonnee)
; Parameters ....: $DateDonnee, Envoyer une date au type anglais ou français, string.
; Return values .: En cas de jour ouvré, retourne true, sinon retourne false
; Author ........: martinbrait
; Modified.......:
; Remarks .......: 2000 à 2999
; Related .......:
; Link ..........;
; Example .......; Yes
;~ $JourChoisi="16/10/2014"
;~ MsgBox(64,"CONTROLE",EstUnJourOuvre($JourChoisi))
; ===============================================================================================================================
Func EstUnJourOuvre($DateDonnee)
Local $JourOuvre
$JourOuvre=True
If JourDeCetteDate($DateDonnee) = 0 Or JourDeCetteDate($DateDonnee) = 6 Then
$JourOuvre=False
EndIf
Return $JourOuvre
EndFunc
; ===============================================================================================================================
; #INTERNAL_USE_ONLY#============================================================================================================
;
;==============================================================================================================================
Func Partiel1($DateDonnee)
#comments-start
Depuis l'ajustement du calendrier grégorien, sont bissextiles les années:
soit divisibles par 4 mais non divisibles par 100
soit divisibles par 400
Inversement, NE SONT PAS bissextiles, les années:
soit non divisibles par 4
soit divisibles par 100, mais pas par 400.
#comments-end
Local $NbLeapYears
;Pour une date située au XXIe siècle, prenons par exemple le 15 mars 2006.
;On ajoute le nombre d’années depuis le début du siècle + le nombre années bissextiles depuis le début du siècle soit 6+2 = 8.
$AnneeExtraite=PartFromDateString($DateDonnee,"annee")
For $i = 2000 to $AnneeExtraite
$NbLeapYears=$NbLeapYears+_DateIsLeapYear($i);On optimise le retour booleen de _DateIsLeapYear
Next
Return ($AnneeExtraite - 2000)+ $NbLeapYears
EndFunc
Func Partiel2($DateDonnee)
;Pour une date située au XXIe siècle, prenons par exemple le 15 mars 2006.
;Puis on ajoute le nombre de jours depuis le début du mois moins une valeur constante,
;quelque soit la date, qui est égale à 2, soit 15-2 = 13. Sous-total = 8 + 13 = 21
;Je teste avec un retour possible de valeur -1, au cas où le jour est le premier du mois!
Return PartFromDateString($DateDonnee,"jour")-2
EndFunc
Func Partiel3($DateDonnee)
;Pour une date située au XXIe siècle, prenons par exemple le 15 mars 2006.
;A ce stade, il vous faut connaitre les formules suivantes:
;Janvier = 0, Février et Mars = 3, Avril = 6, Mai=1, Juin = 4, Juillet = 6, Août = 2, Septembre = 5, Octobre = 0, Novembre = 3, Décembre = 5.
;On ajoute la valeur du mois de mars à notre sous-total, soit 3 + 21 = 24.
$LeMois=PartFromDateString($DateDonnee,"mois")
Select
Case $LeMois = "01"
Return 0
Case $LeMois = "02"
Return 3
Case $LeMois = "03"
Return 3
Case $LeMois = "04"
Return 6
Case $LeMois = "05"
Return 1
Case $LeMois = "06"
Return 4
Case $LeMois = "07"
Return 6
Case $LeMois = "08"
Return 2
Case $LeMois = "09"
Return 5
Case $LeMois = "10"
Return 0
Case $LeMois = "11"
Return 3
Case $LeMois = "12"
Return 5
EndSelect
EndFunc
Func PartFromDateString($DateDonnee,$ElementDeDate)
;On peut proposer sous forme de string, au format anglais ou français, la date choisie
; Traitement N°1 : Mettre la date au format Anglais.
If StringInstr($DateDonnee,"/")>0 Then
$aDate = StringSplit($DateDonnee, "/")
;_ArrayDisplay($aDate,"")
If StringLen($aDate[3])=4 Then
$dt = $aDate[3] & "/" & $aDate[2] & "/" & $aDate[1]
EndIf
Select
Case $ElementDeDate = "jour"
If StringLen($aDate[3])=4 Then
$jour = $aDate[1]
ElseIf StringLen($aDate[1])=4 Then
$jour = $aDate[3]
EndIf
Return $jour
Case $ElementDeDate = "mois"
$mois = $aDate[2]
Return $mois
Case $ElementDeDate = "annee"
If StringLen($aDate[3])=4 Then
$annee = $aDate[3]
ElseIf StringLen($aDate[1])=4 Then
$annee = $aDate[1]
EndIf
Return $annee
EndSelect
EndIf
;Si la fonction ne retourne rien, il y a une erreur
;dans le format de $DateDonnee, envoyée en paramètre.
EndFunc
;====================================
; #CORRECTION, AVEC _DatetoDayOfWeek#
;====================================
Func EstUnJourOuvreBIS($JourChoisi)
If StringInstr($JourChoisi,"/")>0 Then
$aDate = StringSplit($JourChoisi, "/")
;_ArrayDisplay($aDate,"")
$annee = $aDate[1]
$mois = $aDate[2]
$jour = $aDate[3]
If StringLen($aDate[3])=4 Then
$annee = $aDate[3]
$mois = $aDate[2]
$jour = $aDate[1]
EndIf
Local $JourOuvre
$JourOuvre=True
If _DatetoDayOfWeek($annee,$mois,$jour) = 7 Or _DatetoDayOfWeek($annee,$mois,$jour) = 1 Then
$JourOuvre=False
EndIf
Return $JourOuvre
EndIf
EndFunc
;~ MsgBox(4096, "", "Le jour choisi est-il un jour ouvré? " & EstUnJourOuvreBIS($JourChoisi))
Func JourDeLaSemaine()
;Avec la fonction existante _DatetoDayOfWeek
$JourChoisi="19/10/2014"
If StringInstr($JourChoisi,"/")>0 Then
$aDate = StringSplit($JourChoisi, "/")
;_ArrayDisplay($aDate,"")
$annee = $aDate[1]
$mois = $aDate[2]
$jour = $aDate[3]
If StringLen($aDate[3])=4 Then
$annee = $aDate[3]
$mois = $aDate[2]
$jour = $aDate[1]
EndIf
EndIf
;Avec la fonction existante revenait à faire
MsgBox(4096, "", "Le jour choisi vaut: " & _DatetoDayOfWeek($annee,$mois,$jour))
MsgBox(4096, "", "Le nom du jour choisi est : " & _DateDayOfWeek(_DatetoDayOfWeek($annee,$mois,$jour)))
EndFunc
;~ JourDeLaSemaine()
Code : Tout sélectionner
Local $aDay[8] = [ "", "Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"]
Local $day = _DateToDayOfWeek($annee, $mois, $jour)
MsgBox(4096, "", "Le nom du jour choisi est : " & $aDay[$day])