Page 1 sur 1
Connaitre le N° de semaine à partir d'une Date!
Publié : ven. 05/janv./2007 18:52
par nico
Salut,
Est-ce que quelqu'un sait comment obtenir le N° de semaine à partir d'une Date!
Publié : ven. 05/janv./2007 18:56
par wolfjeremy
Peut etre en fesant : DayOfYear(Date) / 7
Enfin c'est juste une proposition...
Publié : ven. 05/janv./2007 20:07
par Flype
si on veut faire les choses bien il faut la norme ISO 8601.
ce qui donne en principe cette fonction :
Code : Tout sélectionner
Procedure.l Week(date.l) ; Return the week number of the specified date.
Protected a.l = (14 - Month(date)) / 12
Protected y.l = Year(date) + 4800 - a
Protected m.l = Month(date) + 12 * a - 3
Protected j.l = Day(date) + (153 * m + 2) / 5 + 365 * y + y / 4 - y / 100 + y / 400 - 32045
Protected t.l = (j + 31741 - (j % 7)) % 146097 % 36524 % 1461
ProcedureReturn (((t - (t / 1460)) % 365) + (t / 1460)) / 7 + 1
EndProcedure
Debug Week(Date())
Debug Week(Date(2006,11,23,15,30,30))
Debug Week(AddDate(Date(), #PB_Date_Week, 12))
Debug Week(AddDate(Date(), #PB_Date_Week, 25))
Publié : ven. 05/janv./2007 20:26
par Flype
ou en décomposant en deux fonctions :
Code : Tout sélectionner
Procedure.l JulianDay(date.l) ; Return the julian day of the specified date.
Protected a.l = (14 - Month(date)) / 12
Protected y.l = Year(date) + 4800 - a
Protected m.l = Month(date) + (12 * a) - 3
Protected j.l = Day(date) + (((153 * m) + 2) / 5) + (365 * y) + (y / 4) - (y / 100) + (y / 400) - 32045
ProcedureReturn j
EndProcedure
Procedure.l WeekOfYear(date.l) ; Return the week number of the specified date.
Protected j.l = JulianDay(date)
Protected t.l = (((j + 31741 - (j % 7)) % 146097) % 36524) % 1461
Protected w.l = ((((t - (t / 1460)) % 365) + (t / 1460)) / 7) + 1
ProcedureReturn w
EndProcedure
d = Date(2007,1,1,0,0,0)
For i = 0 To 365
Debug WeekOfYear(AddDate(d, #PB_Date_Day, i))
Next
Publié : ven. 05/janv./2007 20:39
par nico
Super!

Re: Connaitre le N° de semaine à partir d'une Date!
Publié : sam. 06/janv./2007 12:34
par Patrick88
nico a écrit :Salut,
Est-ce que quelqu'un sait comment obtenir le N° de semaine à partir d'une Date!
facile , tu regardes sur un calendrier...
pat
Publié : sam. 06/janv./2007 12:54
par nico
C'est ce que j'ai fait pour vérifier que le code fonctionnait bien!

Publié : sam. 06/janv./2007 18:10
par Flype
Il y a juste un petit problème apparemment concernant la '53ème' semaine.
En principe, on s'accorde à dire qu'il y a 52 semaines mais parfois il y a un bout de 53ème semaine à cheval avec la 1ère semaine de l'année suivante.
Le souci c'est que ce code retourne 1 dans ce cas précis et non 53.
mais en même temps c'est vrai aussi c'est la semaine 1 de l'année suivante
Faut juste le savoir....
Publié : sam. 06/janv./2007 18:20
par Dr. Dri
dans ce cas il faut se baser sur l'année, ou le mois, si c'est en décembre c'est la semaine 53
si décembre et semaine = 1 alors semaine = 53
Dri
Publié : sam. 06/janv./2007 22:00
par Flype
oui pourquoi pas. mais je ne sais si c'est ISO de faire comme çà.
en tout cas voici ce que çà donne :
Code : Tout sélectionner
Procedure.l JulianDay(date.l) ; Return the julian day of the specified date.
Protected a.l = (14 - Month(date)) / 12
Protected y.l = Year(date) + 4800 - a
Protected m.l = Month(date) + (12 * a) - 3
Protected j.l = Day(date) + (((153 * m) + 2) / 5) + (365 * y) + (y / 4) - (y / 100) + (y / 400) - 32045
ProcedureReturn j
EndProcedure
Procedure.l WeekOfYear(date.l) ; Return the week number of the specified date.
Protected j.l = JulianDay(date)
Protected t.l = (((j + 31741 - (j % 7)) % 146097) % 36524) % 1461
Protected w.l = ((((t - (t / 1460)) % 365) + (t / 1460)) / 7) + 1
If w = 1 And Month(date) = 12 : w = 53 : EndIf
ProcedureReturn w
EndProcedure
d = Date(2007,1,1,0,0,0)
For i = 0 To 364
Debug WeekOfYear(AddDate(d, #PB_Date_Day, i))
Next