Trouver le numéro de la semaine

Joël Prince

Code exemple pour retourner le numéro d'une semaine

- Titre : Trouver le numéro de la semaine

- Auteur : Joël Prince

- Parution : 4 août 2005

- Licence : Copyright ® 2005 4D s.a.. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

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:=NumeroDeSemaine (!01/04/2453!)

après avoir recopié la méthode suivante :

1. `NumeroDeSemaine(Date)-›Numéro de la semaine

2. `Paramètre Type Description

3. `Date Date Date dont on veut connaître le numéro de semaine

4. `Résultat entier Numéro de la semaine où se trouve la date

6. C_DATE($1;$NouvelAn)

7. C_ENTIER($0;$NoJour)

8. $NouvelAn:=Date("01/01/"+Chaine(Annee de($1)))

10. `trouver le premier jour de l'année

11. $NoJour:=Numéro du jour($NouvelAn)-1

12. $NoJour:=$NoJour+(7* Num($NoJour=0))

14. ` le lundi devient 1er jour et dimanche 7e

15. $0:= Ent (($NoJour+($1-$NouvelAn+1)+5)/7)- Ent ($NoJour/5)

17. `c'est tout, c'est fini !

19. Au cas ou   `mais il faut contrôler les semaines bornes

21. : ($0=0)

22. ` ... chercher le n° de semaine du dernier jour de l'année précédente

23. $0:= NumeroDeSemaine ($NouvelAn-1)

24. `qui peut éventuellement renvoyer au cas semaine 53

25. ($0=53) $NouvelAn:= Date ("01/01/"+ Chaine ( Annee de ($1)+1))

26. `chercher le n° de semaine du premier jour de l'année suivante

27. Si (( Numéro du jour ($NouvelAn)›1) (Numéro du jour ($NouvelAn)‹6))

28. `si plus petit que vendredi (attention à dimanche =1 ici)

29. $0:=1

30. Fin de si   `sinon on garde 53

32. Fin de cas

34. `Note : Attention au nom de cette méthode récursive

35. `dont le nom est utilisé par elle-même.

36. `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 DateDansSemaine (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.)

1. `DateDansSemaine (Année{;Semaine;Jour})-›Date

2. `expl:DateDansSemaine(2013;13;jeudi)

3. `Paramètre Type Description

4. `Année entier Année de recherche

5. `semaine entier semaine de recherche

6. `N° du jour entier si on veut un autre jour que le lundi

7. `Résultat date date

9. C_DATE($0;$NouvelAn)

10. C_ENTIER($1;$2;$3;$NoJour)

11. $NouvelAn:= Date ("01/01/"+Chaine($1))

13. `trouver le premier jour de l'année

14. $NoJour:= Numéro du jour ($NouvelAn)-1

15. $NoJour:=$NoJour+(7* Num ($NoJour=0))

17. `décalage : le lundi devient 1er jour et dimanche septième

18. $0:=($NouvelAn-$NoJour+1)+(7* Num ($NoJour›4))

20. `Résultat=(premier jour de la semaine du premier de l'an)

21. `+(ajouter 7 jours si n°jour vendredi samedi ou dimanche)

22. Si ( Nombre de paramètres ›1)

23. $0:=$0+(($2-1)*7)

24. Fin de si

26. `+(nombre de semaines demandé - une pour la 1ere)

27. Si ( Nombre de paramètres›2 )

28. $0:=$0+$3-2+(7* Num ($3=1))

29. Fin de si

31. `+décalage de jours (1=dimanche, 2=lundi, etc.)

Ici, aucun contrôle sur les valeurs des paramètres pour une saisie du type

DateDansSemaine(20130 ;-13 ;420)

On pourrait écrire :

1. Si (Nombre de parametres›1)

2. $0:=$0+(($2-Num($2›0))*7)  `si semaine négative

3. Fin de si

5. Si (Nombre de parametres›2)

7. Si ($3‹1) | ($3›7)

8. `ajout ou retrait du nombre de jours au lundi

9. $0:=$0+$3

10. Sinon

11. `un jour de la semaine valide

12. $0:=$0+$3-2+(7*Num($3=1))

13. Fin de si

15. Fin de si