Page 1 sur 1

Numéro de la semaine.

Publié : mer. 11/janv./2006 23:16
par Chris
Est-ce que quelqu'un sait si il y a un moyen de connaitre les règles pour numéroter les semaines, et comment connaître le n° de la semaine par rapport à une date.

Publié : mer. 11/janv./2006 23:54
par flaith
Fonction en C ici http://www.csharpfr.com/code.aspx?ID=30827
soit :

Code : Tout sélectionner

int NumeroSemaine(DateTime ParamMaDate)
{ 
  //par Mercusyo
  // Norme internationale ISO-8601 : http://www.auduteau.net/calendar/cal5.shtml
  // Cf. Paragraphe : 5.8 Comment calculer le numéro de semaine ?

  int iNumSemaine;
  int iNumeroJourJulien = 0;
  int iCalculJuliena, iCalculJulieny, iCalculJulienm;
  int id1, id4, iL;

  // Calcul du numéro de semaine du calendrier Julien ...
  iCalculJuliena = (14 - ParamMaDate.Month) / 12;
  iCalculJulieny = ParamMaDate.Year + 4800 - iCalculJuliena;
  iCalculJulienm = ParamMaDate.Month + 12*iCalculJuliena - 3;
  iNumeroJourJulien = ParamMaDate.Day + (153*iCalculJulienm + 2)/5 + 365*iCalculJulieny
                       + iCalculJulieny/4 - iCalculJulieny/100 + iCalculJulieny/400
                       - 32045;
 
  id4 = (iNumeroJourJulien+31741-(iNumeroJourJulien%7))%146097%36524%1461;
  iL = id4/1460;
  id1 = ((id4-iL)%365)+iL;

  // Calcul du numéro de semaine "classique" ...
  iNumSemaine = id1/7 + 1;
  return iNumSemaine;
}

Publié : mer. 11/janv./2006 23:57
par Dorian
Tiens voici mon code :

Code : Tout sélectionner

Procedure Semaine(Annee, Mois, Jour)
  a = 1
  While DayOfWeek(Date(Annee, 1, a, 1, 0, 0)) <> 1
    a = a + 1
  Wend
  nombre_jour.l = DayOfYear(Date(Annee, Mois, Jour,1,0,0)) - a + 1
  semaine.l = Round(nombre_jour / 7, 1)
  ProcedureReturn semaine
EndProcedure

Debug Semaine(2005, 7 , 4)
J'ai mis un moment avant de trouver mon erreur ^^.

Normalement il marche bien

Publié : mer. 11/janv./2006 23:59
par Chris
Merci. Je regarderai ça :)

Publié : jeu. 12/janv./2006 0:04
par Dorian
Rectification il merde avec l'année 2004 :?

Mais lorsque j'ai fais des tests avec 2005 sa marche donc je regarderai demain ^^

EDIT : Sa merde avec une partie de 2004 grrrrr je comprend plus rien :(

ex : 29 fev 2004, 30 fev 2004, 1 jan 2004, 11 jan 2005 sa marche nikel

2 aout 2004, 31 dec 2004 sa merde :mad: :cry: 8O ^^

Publié : jeu. 12/janv./2006 0:36
par Frenchy Pilou

Publié : jeu. 12/janv./2006 0:43
par flaith

Code : Tout sélectionner

Procedure.b NumeroSemaine(annee, mois, jour)
  ; Norme internationale ISO-8601 : http://www.auduteau.net/calendar/cal5.shtml
  ; Cf. Paragraphe : 5.8 Comment calculer le numéro de semaine ?

  ; Calcul du numéro de semaine du calendrier Julien ...
  iNumeroJourJulien = 0
  iCalculJuliena = (14 - mois) / 12
  iCalculJulieny = annee + 4800 - iCalculJuliena
  iCalculJulienm = mois + 12 * iCalculJuliena - 3
  iNumeroJourJulien = jour + (153 * iCalculJulienm + 2) / 5 + 365 * iCalculJulieny
  iNumeroJourJulien = iNumeroJourJulien + iCalculJulieny / 4 - iCalculJulieny / 100 + iCalculJulieny / 400 - 32045
  id4 = (iNumeroJourJulien + 31741 - (iNumeroJourJulien % 7)) % 146097 % 36524 % 1461
  iL = id4 / 1460
  id1 = ((id4-iL) % 365) + iL

  ; Calcul du numéro de semaine "classique" ...
  iNumSemaine = id1 / 7 + 1
  ProcedureReturn iNumSemaine
EndProcedure

NumWeek.b = NumeroSemaine(2004, 12 , 31)

If OpenConsole()
    Print("Numero de Semaine pour 31/12/2005 = ")
    PrintN(Str(NumWeek))

    PrintN("Appuyer sur 'Return' pour quitter.")
    Input()
    CloseConsole()
EndIf
End
Ca marche mieux !!!

Publié : jeu. 12/janv./2006 1:24
par Chris
Dorian a écrit :Rectification il merde avec l'année 2004 :?

Mais lorsque j'ai fais des tests avec 2005 sa marche donc je regarderai demain ^^

EDIT : Sa merde avec une partie de 2004 grrrrr je comprend plus rien :(

ex : 29 fev 2004, 30 fev 2004, 1 jan 2004, 11 jan 2005 sa marche nikel

2 aout 2004, 31 dec 2004 sa merde :mad: :cry: 8O ^^
A mon avis, si ça marche pour le 30 Fevrier, c'est qu'il y a un TRES TRES gros bug :lol:

Publié : jeu. 12/janv./2006 2:35
par Chris
@flaith

Ca marche nickel, on dirait :)

Publié : jeu. 12/janv./2006 6:57
par Droopy
J'avais posté ça il y a quelque temps

Code : Tout sélectionner

;/ Return the week count of the year

ProcedureDLL Week(Date.l)
  
  Compteur=Date(Year(Date),1,1,0,0,1) ;/ New year day
  
  ;/ Goto 1st monday 
  Repeat
    If DayOfWeek(Compteur)=1 : Break : EndIf
    Compteur=AddDate(Compteur,#PB_Date_Day,1)
  ForEver
  
  ;/ Add 1 week / Test if date is reach
  Repeat
    If Compteur>Date : Break : EndIf
    Compteur=AddDate(Compteur,#PB_Date_Week,1)
    Week+1
  ForEver
  
  ProcedureReturn Week
EndProcedure
  
;/ Test  
; MessageRequester("Week n°",Str(Week(Date())),#MB_ICONINFORMATION)

Publié : jeu. 12/janv./2006 17:13
par flaith
Chris a écrit :@flaith
Ca marche nickel, on dirait :)
oui ca marche impec :D