Produit : 4D 2004 · Plateforme : Mac & Win ♪
Si vous voulez connaître le numéro de semaine du 1er avril 2453, il suffit d'écrire
MonNumSemaine:=
Num
eroDeSemaine (
!01/04/2453!
)
après avoir recopié la méthode suivante :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
`NumeroDeSemaine(Date)-›Numéro de la semaine
`Paramètre Type Description
`Date Date Date dont on veut connaître le numéro de semaine
`Résultat entier Numéro de la semaine où se trouve la date
C_DATE
(
$1
;
$NouvelAn
)
C_ENTIER(
$0
;
$NoJour
)
$NouvelAn
:=
Date
(
"01/01/"
+
Chaine
(
Annee de
(
$1
)))
`trouver le premier jour de l'année
$NoJour
:=
Num
éro du jour(
$NouvelAn
)-
1
$NoJour
:=
$NoJour
+(
7
*
Num
(
$NoJour
=
0
))
` le lundi devient 1er jour et dimanche 7e
$0
:=
Ent
((
$NoJour
+(
$1
-
$NouvelAn
+
1
)+
5
)/
7
)-
Ent
(
$NoJour
/
5
)
`c'est tout, c'est fini !
Au cas ou
`mais il faut contrôler les semaines bornes
: (
$0
=
0
)
` ... chercher le n° de semaine du dernier jour de l'année précédente
$0
:=
Num
eroDeSemaine (
$NouvelAn
-
1
)
`qui peut éventuellement renvoyer au cas semaine 53
(
$0
=
53
)
$NouvelAn
:=
Date
(
"01/01/"
+
Chaine
(
Annee de
(
$1
)+
1
))
`chercher le n° de semaine du premier jour de l'année suivante
Si
((
Num
éro du jour (
$NouvelAn
)
›1
)
(
Num
éro du jour (
$NouvelAn
)
‹6
))
`si plus petit que vendredi (attention à dimanche =1 ici)
$0
:=
1
Fin de si
`sinon on garde 53
Fin de cas
`Note : Attention au nom de cette méthode récursive
`dont le nom est utilisé par elle-même.
`Si vous changez le nom, pensez à le faire dans la méthode.
Et si vous vouliez connaître le premier jour de la semaine de l'année 2013 à la 13e semaine, vous écririez Date
DansSemaine (
2013
;
13
)
après avoir recopié la méthode suivante :
(Notez qu'on peut aussi obtenir le premier jour de la première semaine de l'année 2013 en ne passant que le premier paramètre ou obtenir le premier jeudi de la 13e semaine de l'année 2013 en passant 5 ou la constante jeudi dans le 3e paramètre.)
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
`DateDansSemaine (Année{;Semaine;Jour})-›Date
`expl:DateDansSemaine(2013;13;jeudi)
`Paramètre Type Description
`Année entier Année de recherche
`semaine entier semaine de recherche
`N° du jour entier si on veut un autre jour que le lundi
`Résultat date date
C_DATE
(
$0
;
$NouvelAn
)
C_ENTIER(
$1
;
$2
;
$3
;
$NoJour
)
$NouvelAn
:=
Date
(
"01/01/"
+
Chaine
(
$1
))
`trouver le premier jour de l'année
$NoJour
:=
Num
éro du jour (
$NouvelAn
)-
1
$NoJour
:=
$NoJour
+(
7
*
Num
(
$NoJour
=
0
))
`décalage : le lundi devient 1er jour et dimanche septième
$0
:=(
$NouvelAn
-
$NoJour
+
1
)+(
7
*
Num
(
$NoJour
›4
))
`Résultat=(premier jour de la semaine du premier de l'an)
`+(ajouter 7 jours si n°jour vendredi samedi ou dimanche)
Si
(
Nombre de paramètres
›1
)
$0
:=
$0
+((
$2
-
1
)*
7
)
Fin de si
`+(nombre de semaines demandé - une pour la 1ere)
Si
(
Nombre de paramètres
›2
)
$0
:=
$0
+
$3
-
2
+(
7
*
Num
(
$3
=
1
))
Fin de si
`+décalage de jours (1=dimanche, 2=lundi, etc.)
Ici, aucun contrôle sur les valeurs des paramètres pour une saisie du type
Date
DansSemaine(
20130
;-
13
;
420
)
On pourrait écrire :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Si
(
Nombre de parametres›1
)
$0
:=
$0
+((
$2
-
Num
(
$2
›0
))*
7
)
`si semaine négative
Fin de si
Si
(
Nombre de parametres›2
)
Si
(
$3
‹1
)
|
(
$3
›7
)
`ajout ou retrait du nombre de jours au lundi
$0
:=
$0
+
$3
Sinon
`un jour de la semaine valide
$0
:=
$0
+
$3
-
2
+(
7
*
Num
(
$3
=
1
))
Fin de si
Fin de si