[R] Jour de semaine d'une date donnée.

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
martinbrait
Niveau 4
Niveau 4
Messages : 55
Enregistré le : ven. 06 mars 2009 17:17
Status : Hors ligne

[R] Jour de semaine d'une date donnée.

#1

Message par martinbrait »

Bonjour! 8)

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)
Modifié en dernier par martinbrait le sam. 04 mai 2013 18:52, modifié 1 fois.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [--] Jour de semaine d'une date donnée.

#2

Message par jguinch »

Salut
_DateToDayOfWeek ne suffit pas ?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
martinbrait
Niveau 4
Niveau 4
Messages : 55
Enregistré le : ven. 06 mars 2009 17:17
Status : Hors ligne

Re: [--] Jour de semaine d'une date donnée.

#3

Message par martinbrait »

Hello jguinchard! :wink:

En fait, je cherche cette fonctionnalité,
pour une date envoyée en paramètre,
et non pour la date du jour,
reçue depuis une valeur système.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [--] Jour de semaine d'une date donnée.

#4

Message par jchd »

Pourquoi la fonction ne te convient pas ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [--] Jour de semaine d'une date donnée.

#5

Message par jguinch »

Returns the weekdaynumber for a given date.
Soit l'énoncé n'est pas bon, soit tu n'as pas regardé la doc !
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
martinbrait
Niveau 4
Niveau 4
Messages : 55
Enregistré le : ven. 06 mars 2009 17:17
Status : Hors ligne

Re: [--] Jour de semaine d'une date donnée.

#6

Message par martinbrait »

Hélas, vos réponses, je les ai lues trop tard,
alors j'ai perdu 5 heures.

Auriez-vous la gentillesse d'optimiser, pour mettre en évidence
quelques lacunes/points fort dans mon code?

Bonne soirée.

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()
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [--] Jour de semaine d'une date donnée.

#7

Message par mikell »

Pour avoir les jours en français, à part modifier l'udf tu peux faire comme ça

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])
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
martinbrait
Niveau 4
Niveau 4
Messages : 55
Enregistré le : ven. 06 mars 2009 17:17
Status : Hors ligne

[R] Jour de semaine d'une date donnée.

#8

Message par martinbrait »

Bon, ben j'ai plus qu' à aller me faire greffer des neurones :shock:

MERCI à tous :mrgreen:
Répondre