Page 1 sur 1
[R] Trouver le quantième jour de la semaine du mois
Posté : ven. 16 mars 2012 21:39
par EricF
Bonjour,
Je cherche à récupérer soit le numéro d'un jour donné dans le mois (1er lundi du mois par exemple), voire le numéro de semaine du mois. Est-ce possible ?
Re: [..] trouver la Xème semaine du mois
Posté : ven. 16 mars 2012 21:57
par lesolutionneur
Qu'entends-tu par numéro ?
Veux-tu dire Lundi --> 1, Mardi --> 2... ?
Re: [..] trouver la Xème semaine du mois
Posté : ven. 16 mars 2012 22:13
par EricF
Non, ça, pas de souci. J'ai un script qui s'exécute toutes les semaines (le lundi), et je voudrais vérifier si le jour d'exécution est par exemple le 2è lundi du mois. Je n'ai trouvé que _WeekNumber, mais ce n'est pas vraiment ce que j'aimerais utiliser.
Re: [..] trouver la Xème semaine du mois
Posté : sam. 17 mars 2012 00:16
par Kagami
Si ton script s’exécute tous les lundis, pourquoi tu incrémente pas un fichier .ini à chaque fois que le script s’exécute?
Par exemple:
T'as plus qu'à lire ton fichier pour récupérer le combientième lundi du mois tu es. (Oublie pas de réinitialiser à 0 au début du mois suivant!)
Re: [..] trouver la Xème semaine du mois
Posté : sam. 17 mars 2012 01:58
par Tlem
Bonsoir/bonjour
Pour le numéro de la semaine de l'année, c'est la fonction
_WeekNumberISO. Mais je me doute que cela ne vous conviendra pas, puisque vous cherchez à savoir quel est le lundi du mois par rapport à une date.
Ceci dit, avec un peut de logique, vous devriez pouvoir obtenir votre réponse comme ceci :
_DateToDayOfWeekISO ou
_DateDayOfWeek vont vous permettre de connaitre le jour en cours.
Une fois déterminé si nous sommes bien lundi, vous pouvez vous baser sur ce type d'hypothèse :
Dans le meilleur des cas, si le premier jour du mois est un lundi, nous avons :
1 Lundi
2 Mardi
3 Mercredi
4 Jeudi
5 Vendredi
6 Samedi
7 Dimanche
8 Lundi
9 Mardi
10 Mercredi
11 Jeudi
12 Vendredi
13 Samedi
14 Dimanche
et dans le pire des cas nous aurons :
1 Mardi
2 Mercredi
3 Jeudi
4 Vendredi
5 Samedi
6 Dimanche
7 Lundi
8 Mardi
9 Mercredi
10 Jeudi
11 Vendredi
12 Samedi
13 Dimanche
14 Lundi
Donc par déduction logique, le premier lundi du mois ne peut être compris qu'entre le 1er et le 7iem jour du mois et le deuxième lundi entre le 8ième et 14ième jour du mois.
Cela devrait donner un code comme ceci (tester plus ou moins rapidement) :
► Afficher le texte
Code : Tout sélectionner
#include <Date.au3>
If _DateToDayOfWeekISO(@YEAR, @MON, @MDAY) = 6 Then
Select
Case @MDAY > 0 And @MDAY < 8
MsgBox(32, "Info", "Nous sommes le 1er Lundi du mois")
Case @MDAY > 7 And @MDAY < 15
MsgBox(32, "Info", "Nous sommes le 2ièm Lundi du mois")
Case @MDAY > 14 And @MDAY < 22
MsgBox(32, "Info", "Nous sommes le 3ième Lundi du mois")
Case @MDAY > 21 And @MDAY < 29
MsgBox(32, "Info", "Nous sommes le 4iém Lundi du mois")
Case @MDAY > 28
MsgBox(32, "Info", "Nous sommes le 5iém Lundi du mois")
EndSelect
EndIf
Re: [..] trouver la Xème semaine du mois
Posté : sam. 17 mars 2012 09:20
par mikell
Bien raisonné pour 2 heures du matin
Re: [..] trouver la Xème semaine du mois
Posté : sam. 17 mars 2012 09:35
par Tlem
Joli code. Et pour un lundi ça donne quoi ?

Re: [..] trouver la Xème semaine du mois
Posté : sam. 17 mars 2012 10:30
par mikell
Argh l'effroyable bug du Samedi matin (qui correspond pour moi à votre 3 h du matin, au niveau synapse-rating)
En fait ce simple code
Code : Tout sélectionner
$dayrangeinzemonth = Ceiling(@MDAY/7)
MsgBox(32, "Info", "Nous sommes le " & $dayrangeinzemonth & " ème Samedi du mois")
devrait être valable pour n'importe quel jour de la semaine

Et ça correspond mieux au titre du sujet
Re: [..] Trouver la Xème jour de la semaine
Posté : sam. 17 mars 2012 10:52
par Tlem
C'est effectivement plus simple !!!
D'ailleurs, tant que nous y sommes, allons jusqu'au bout :
► Afficher le texte
Code : Tout sélectionner
$dayrangeinzemonth = Ceiling(@MDAY/7)
$WeekDayName = JourDeLaSemaine()
If $dayrangeinzemonth = 1 Then
$Quantieme = $dayrangeinzemonth & " er "
Else
$Quantieme = $dayrangeinzemonth & " ième "
EndIf
MsgBox(32, "Info", "Nous sommes le " & $Quantieme & $WeekDayName & " du mois ")
Func JourDeLaSemaine()
Local Const $aDayOfWeek[8] = ["", "Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"]
Local $i_aFactor = Int((14 - @MON) / 12)
Local $i_yFactor = @YEAR - $i_aFactor
Local $i_mFactor = @MON + (12 * $i_aFactor) - 2
Local $iDayNum = Mod(@MDAY + $i_yFactor + Int($i_yFactor / 4) - Int($i_yFactor / 100) + Int($i_yFactor / 400) + Int((31 * $i_mFactor) / 12), 7)
Return $aDayOfWeek[$iDayNum + 1]
EndFunc
Edit : J'ai modifié le titre du premier message, car sinon cela n'avait pas trop de sens puisque au départ EricF désirait connaitre la position de la semaine dans le mois (pour en déduire le lundi du mois

).

Re: [..] Trouver la Xème jour de la semaine
Posté : sam. 17 mars 2012 10:57
par mikell
Mais initialement son raisonnement n'était pas faux, puisque basiquement ma ligne de code marche
Reste plus qu'à mettre votre code en 1 seule fonction du type _DayRange("Lundi")
PS "Trouver la Xème jour de la semaine" pas forts en orthographe ces users

Re: [..] Trouver la Xème jour de la semaine
Posté : sam. 17 mars 2012 11:05
par Tlem
Mouais, après votre remarque et réflexion, ma modification de titre n'est pas géniale.
Que pensez vous de : Trouver le quantième jour de la semaine du mois.
On peut sans doute faire mieux, mais là j'ai quelques autres préoccupations ...

Re: [..] Trouver la Xème jour de la semaine
Posté : sam. 17 mars 2012 11:40
par mikell
Tlem a écrit :Que pensez vous de : Trouver le Nème jour de la semaine du mois
Adopté
Que pensez-vous de cette fonction
► Afficher le texte
Code : Tout sélectionner
$myday = _DayRangeInZeMonth("17/03/2012")
MsgBox(32, "Info", "Ce " & $myday[0] & " est le " & $myday[1] & $myday[0] & " du mois ")
Func _DayRangeInZeMonth($date)
Local $elts = StringSplit($date, "/")
Local $res[2]
Local Const $aDayOfWeek[8] = ["", "Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"]
Local $i_aFactor = Int((14 - $elts[2]) / 12)
Local $i_yFactor = $elts[3] - $i_aFactor
Local $i_mFactor = $elts[2] + (12 * $i_aFactor) - 2
Local $iDayNum = Mod($elts[1]+ $i_yFactor + Int($i_yFactor / 4) - Int($i_yFactor / 100) + Int($i_yFactor / 400) + Int((31 * $i_mFactor) / 12), 7)
$res[0] = $aDayOfWeek[$iDayNum + 1]
Local Const $dayrangeinzemonth = Ceiling($elts[1]/7)
If $dayrangeinzemonth = 1 Then
$res[1] = $dayrangeinzemonth & " er "
Else
$res[1] = $dayrangeinzemonth & " ème "
EndIf
Return $res
EndFunc
Re: [..] Trouver la Xème jour de la semaine
Posté : sam. 17 mars 2012 11:49
par EricF
Merci, je vais tester tout ça
Re: [R] Trouver le quantième jour de la semaine du mois
Posté : sam. 17 mars 2012 16:36
par Tlem
Titre du sujet modifié et passé en [R].
Pour la fonction, j’adhère. Par conter
_DayRangeInMonth() me semblerait plus universel.
@Mikell : Rajoutez là dans la section appropriée.