Obtenir le numero de semaine sans le bogue du 29 janvier compté en semeine 53

0/5 (11 avis)

Snippet vu 12 845 fois - Téléchargée 30 fois

Contenu du snippet

il prend le numero de la semaine d'une date
il prend en fait le numero de semaine du dimanche ainsi la semaine entiere a le meme numéro rt evite donc le bogue du lundi 29 decembre compté en semaine 53 au lieu de semaine 1

Source / Exemple :


Sub Button1_Click(sender As Object, e As EventArgs)
label1.visible=true
label2.visible=true
dim dat as date
dim semaine as integer
dim semain as integer

dat=(calendar1.selecteddate)
semain=weekday(dat)
if semain=2 then
    dat=dat.adddays(6)
end if

if semain=3 then
    dat=dat.adddays(5)
end if

if semain=4 then
    dat=dat.adddays(4)
end if

if semain=5 then
    dat=dat.adddays(3)
end if

if semain=6 then
    dat=dat.adddays(2)
end if

if semain=7 then
    dat=dat.adddays(1)
end if

semaine=datepart("ww",dat,vbmonday)

label2.text=("le numero de la semaine dont la date du " & calendar1.selecteddate & " fait partie est le :").tostring
label1.text=semaine
End Sub

A voir également

Ajouter un commentaire Commentaires
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
5 févr. 2004 à 18:05
pourquoi tu fait pas
dat = dat.adddays(8-weekday(dat))
il existe probablement des fonctions de la classe date pour remplacer les fonctions du vb WeekDay et DatePart
cs_john42 Messages postés 7 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 6 février 2004
6 févr. 2004 à 10:24
Oui tu as parfaitement raison. Il faut remplacer tout le bloc if end if par dat=dat.adddays(8-weekday(dat))

Merci beaucoup Warny
bedelaitre Messages postés 3 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 6 février 2004
6 févr. 2004 à 13:27
Pour information,

il n'y a pas de bug du lundi 29 ....

Il existe au moins trois règles officielles pour calculer les numéros de semaine :

1/ La première semaine commence le 1er janvier
2/ La première semaine est celle qui contient le premier jeudi de l'année
3/ La première semaine commence le premier lundi (ou dimanche, je sais plus) de l'année.


La règle la plus utilisée est celle du Jeudi (c'est une règle ISO, si, si ...). Ainsi, le Lundi 29 est en semaine 53 de l'année 2003 et le Jeudi 1 est en semaine 01 de l'année 2004

Cordialement

Bertrand
bedelaitre Messages postés 3 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 6 février 2004
6 févr. 2004 à 13:49
Oups me suis emmelé ... le lundi 29/12/2003 est bien en semaine 01.

par contre, dans VB, quand on récupère le numéro de semaine lié à un jour de l'année, on peut préciser la règle de calcul à appliquer.

Voir l'aide en ligne de la méthode DatePart, il existe un dernier paramètre optionnel "FirstWeekOfYearValue"

------------------------------
The FirstWeekOfYearValue argument can have one of the following settings.

Enumeration value Value Description
FirstWeekOfYear.System 0 First week of year specified in system settings
FirstWeekOfYear.Jan1 1 Week in which January 1 occurs (default)
FirstWeekOfYear.FirstFourDays 2 Week that has at least four days in the new year (complies with ISO standard 8601, section 3.17)
FirstWeekOfYear.FirstFullWeek 3 First full week in new year

------------------------

Cordialement,

Bertrand
VBbigineure Messages postés 169 Date d'inscription vendredi 27 septembre 2002 Statut Membre Dernière intervention 27 février 2009 1
6 févr. 2004 à 15:45
Oui,
dans le titre tu parlais du 29 janvier en semaine (semeine ?) 53... ca aurait été un fameux bogue...
Mais non, c'est configurable comme l'explique bedelaitre, mais par défaut, c'est toujours le système ricain... Arg...
Y'a bien d'autres soucis pour la gestion date et heure en VB, s'en méfier surtout si son appli va être utilisée sur différents standards date et format de dates.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.