Numéro de la semaine.
Publié : mer. 11/janv./2006 23:16
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.
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;
}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)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
EndA mon avis, si ça marche pour le 30 Fevrier, c'est qu'il y a un TRES TRES gros bugDorian 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![]()
![]()
^^
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)oui ca marche impecChris a écrit :@flaith
Ca marche nickel, on dirait