Avatar billede puppetmaster Nybegynder
14. januar 2004 - 12:28 Der er 16 kommentarer og
2 løsninger

DatePart - Find ugenummer

Jeg har en rutine som benytter funktionen DatePart. Den skal konvertere en dato til et ugenummer.

DatePart("ww", Dato, vbMonday, vbFirstFourDays)
Det virkede fint sidste år, men ikke i år (skudår, velsagtens).
Hvordan laver jeg det om, så det virker med skudår også?
Avatar billede medions Nybegynder
14. januar 2004 - 12:31 #1
Jeg vil mene den her skulle gøre det fintfint!

dato = now()
ugenummer = Format(dato, "ww")

//>Rune
Avatar billede terry Ekspert
14. januar 2004 - 13:02 #2
medions>doesnt seem to work!
format(#2004-01-04#, "ww") gives weeek 2 but that isnt correct!
and if I use
format(#2004-01-04#, "ww",2,2) then this gives me the correct week!

and if I use this format (Date,"ww",2,2) for all dates in 2004 then it gives me the exact same week number as datepart!

puppetmaster, what dates are you having problems with?
Avatar billede terry Ekspert
14. januar 2004 - 13:11 #3
I must admit I dont see a problem using DatePart("ww", Dato, vbMonday, vbFirstFourDays)

1st January is a thursday and there are four days in the week so that makes it week 1 doest it?
Avatar billede puppetmaster Nybegynder
14. januar 2004 - 13:24 #4
Hi, terry.
The problem is, that the user enters a weeknumber, e.g. 02 and a year, e.g. 04.
the date is then translated into a "date range", from 05-01-2004 to 11-01-2004.
With the above week no. and year, the program uses week 53!!! :( :( :(
Avatar billede terry Ekspert
14. januar 2004 - 13:32 #5
this wasnt indicated in the original question! So the code you gave hasnt really much to do with the problem :o)

There is a known problem with using datepart when trying to calculate a date from a year+weeknumber!

I dont have the work around here at the moment, I will try and see if I can find a link or wil get back later
Avatar billede puppetmaster Nybegynder
14. januar 2004 - 13:47 #6
ok, thanks Terry. Here is the code that calculates the week number:
(if )

Function UgeTilDato(uge As Integer) As Date
  Dim Dato As Date
  Dim ugenr As Integer
  Dato = DateValue("1-1-" & uge \ 100)
  Dato = DateAdd("d", 2 - Weekday(Dato), Dato)
  ugenr = DatePart("ww", Dato, vbMonday, vbUseSystem)
  While DatePart("ww", Dato, vbMonday, vbUseSystem) <> 1
    ugenr = DatePart("ww", Dato, vbMonday, vbUseSystem)
    Dato = DateAdd("ww", 1, Dato)
  Wend
  UgeTilDato = DateAdd("ww", (uge Mod 100) - 1, Dato)
End Function
Avatar billede terry Ekspert
14. januar 2004 - 13:48 #7
Actually I dont hink it was in connection in claculating a date from a given year and week!

How are you doing your calculation at the moment?
Avatar billede terry Ekspert
14. januar 2004 - 13:50 #8
OK, didnt see your last comment!
Avatar billede terry Ekspert
14. januar 2004 - 13:56 #9
UgeTilDato only takes a week number not a year! How are we to return a correct date with that?
Avatar billede puppetmaster Nybegynder
14. januar 2004 - 14:46 #10
Well, the parameter, uge,  that is transfered, is the number of weeks since 01-01-2000. week 2 year 2004 maps to the value 402.
That is then transformed into a date: Dato = DateValue("1-1-" & uge \ 100)
Avatar billede puppetmaster Nybegynder
14. januar 2004 - 14:47 #11
Here's the call to the function:
[fra] = UgeTilDato(([aar] Mod 100) * 100 + [uge])
' [aar] = 04 and [uge] = 02
Avatar billede puppetmaster Nybegynder
14. januar 2004 - 15:00 #12
These are some of the results:
Week      Year      Date
02        02      07-01-2002
02        03      06-01-2003
02        04      10-01-2005
02        05      10-01-2005
02        06      09-01-2006
(the 2005 and 2006 dates are NOT a typo!)
Avatar billede puppetmaster Nybegynder
14. januar 2004 - 15:01 #13
UPS! :(
2004 and 2005! ;)
Avatar billede martin_moth Mester
14. januar 2004 - 16:54 #14
puppetmaster:
(the 2005 and 2006 dates are NOT a typo!)
UPS! :(
2004 and 2005! ;)

Hvad er så slåfejl og hvad er ikke - der er ikke en eneste 2004 i tabellen? Forvirringen er total (for mig i det mindste ;o)
Avatar billede puppetmaster Nybegynder
14. januar 2004 - 23:03 #15
Martin:
Du er rigtig på den; der er ikke EN ENESTE i 2004! Uanset om jeg prøver med uge 1, 13, 43 eller 52 i år 2004! :(
Avatar billede martin_moth Mester
18. januar 2004 - 13:43 #16
Du misforstår... Du skriver to forskellige ting, og ... Glem det.

Jeg tror der er lidt forvirring om hvad du har som slåfejl og hvad der er fejl fra VB - måske skulle du skrive dit svar 14/01-2004 15:00:33 om igen
Avatar billede puppetmaster Nybegynder
19. januar 2004 - 08:49 #17
These are some of the results:
Week      Year      Date
02        02      07-01-2002
02        03      06-01-2003
02        04      10-01-2005
02        05      10-01-2005
02        06      09-01-2006
Avatar billede puppetmaster Nybegynder
26. januar 2004 - 10:24 #18
Lukker spørgsmålet igen, har fået svar på det gennem http://www.eksperten.dk/spm/455955
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester