Rekenen met Iso week nummers

Status
Niet open voor verdere reacties.

ralluv

Gebruiker
Lid geworden
8 feb 2008
Berichten
68
Ik hoop dat iemand mij kan helpen, maar ik denk dat dit een lastige wordt. Ik ben een database aan het bouwen voor een bedrijf waar alles met weeknummers wordt berekend. Helaas is access amerikaans en gebruikt daarom niet de ISO kalender, waardoor bijvoorbeeld week1 in 2010 niet bestaat (gaat namelijk van week 53 naar week 2).

Het probleem om het goede weeknummer te krijgen heb ik inmiddels opgelost door de volgende module te maken:
[SQL]
Public Function IsoWeekNumber(d1 As Date) As Integer
Dim d2 As Long
d2 = DateSerial(Year(d1 - WeekDay(d1 - 1) + 4), 1, 3)
IsoWeekNumber = Int((d1 - d2 + WeekDay(d2) + 5) / 7)
End Function
[/SQL]

Het probleem is echter dat ik ook het jaarnummer ervoor moet hebben en ik ermee moet rekenen. Dit levert de volgende 2 problemen:

- Om het jaar ervoor te krijgen zoals ik eerst had, heb ik gebruikt gemaakt van hetvolgende: Right(Year([datum]),2) & isoweeknumber([datum]). Het probleem is nu dat ik bij week 1 t/m 9 geen 0 ervoor krijg te staan. Dus krijg ik bijvoorbeeld bij de 1e week van januari 2010 de volgende uitkomst: 101. Terwijl ik dus 1001 wil krijgen. Ook de toevoeging van Right(isoweeknumber([datum]),2) geeft niet het gewenste resultaat.

- Als ik IsoWeekNumber([datum])-1 doe, is het jammer genoeg echt -1 en niet min 1 week. Eerst gebruikt ik de volgende formule: Right(Format(DateAdd("ww",-1,Date()),"yyyyww"),4). Met deze formule krijg ik deze week te staan: 0950, want het is namelijk week 51. Hoe kan ik nou de isoweeknummering minus 1 week doen?

Het is vrij complex uitgelegd dus ik hoop dat jullie het snappen, vraag anders nog maar even wat er niet duidelijk is! Bedankt alvast!!
 
Laatst bewerkt:
In de bijlage een voorbeeldje met de functie Format en de functie DatePart. Kijk maar eens in de Query. Volgens mij werkt de functie DatePart correct. Tenminste ik heb het gemaakt in Access versie 2003 met de bestandsindeling Access 2000.
 

Bijlagen

Bedankt voor de snelle reactie, maar beide problemen zijn helaas niet opgelost.
- Ik wist van de Datepart functie af om met weken te rekenen, maar niet als je de ISO weeknummering gebruikt. Zoals je ziet in jou voorbeeld, is 4 januari week 2. Als je echter in je agenda kijkt is dit met de ISO kalender week 1.
- Bij weeknummer 1 t/m 9 staat er helaas nog geen 0 voor.

Toch bedankt, hopelijk iemand anders die het weet?
 
Harry bedankt voor je reactie!

Het probleem met de 0 voor de weeknummers is opgelost, helemaal top!

De link die jij geeft had ik ook al gezien, maar dit was me nog gelukt. Ik ga hier nog even stoeien en zal wel laten weten als ik er niet uitkom!
 
Ik heb het net geprobeerd, maar het lukt me nog altijd niet om er mee te rekenen. Ook al nadat ik hetgeen van de microsoft site heb ingevuld krijg ik wanneer ik ga rekenen met de weken niet het goede antwoord.

Als ik nu weeknumber(datum) doe klopt het weeknummer wel. Maar zodra ik vervolgens ermee ga rekenen zoals bijvoorbeeld met de datum 14 januari 2010, krijg ik bij de volgende formule nog altijd 2010 week 2 terwijl dit 2010 week 1 moet zijn:

Right(format(dateadd("ww",-1,[datum],"yyyyww"),4)

Misschien iemand suggesties?
 
Dan werkt jouw versie van Access toch anders dan de mijne. Zie bijgaande afbeelding. 4 -1tm 10-1 is bij mnij week 1.
 

Bijlagen

  • Weeknummer.JPG
    Weeknummer.JPG
    54 KB · Weergaven: 142
huh inderdaad, dat is erg vreemd! Op mijn 2003 versie werkt het wel, maar op mijn 2007 versie niet? Wat heb je nou precies gedaan om het goed te krijgen, want dat kan ik niet achterhalen
 
Laatst bewerkt:
Heb het nog eens gechecked, maar er zit gewoon verschil tussen versie 2003 en 2007.
Nu rest mij de vraag nog hoe ik met de formule die je gebruikt hebt kan rekenen met weken. Dus hoe zou ik jou formule -1 week kunnen doen?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan