Avatar billede rsa Nybegynder
04. december 2002 - 09:32 Der er 10 kommentarer og
1 løsning

Forkert beregning af ugenr og dag

Jeg har gjort følgende:
ugenr = DatePart("ww", dt, vbUseSystemDayOfWeek, vbUseSystem)
dagnr = DatePart("w", dt, vbUseSystemDayOfWeek, vbUseSystem)

Resultatet er følgende:
dt        ugenr    dagnr
29-12-03    53      1
30-12-03      1      2
31-12-03      1      3
01-01-03      1      3
01-01-04      1      4

Er der nogen der ved, hvordan dette hænger sammen?

På forhånd tak!
Avatar billede Spotgun Seniormester
04. december 2002 - 09:35 #1
Det skyldes sikkert at den definerer uge 1 som værende den første uge i året, hvor der er x-antal hverdage. Kan ikke huske det præcise tal, men jeg er ret sikker på, at det er derfor. Du kan løse det ved at ændre på dine parametre i DatePart...
04. december 2002 - 09:40 #2
Prøv denne her til ugenummeret.

Function WeekNum(dtDate As Date) As Long
    Dim lRetVal As Long
    lRetVal = DateSerial(Year(dtDate + (8 - Weekday(dtDate)) Mod 7 - 3), 1, 1)
    WeekNum = ((dtDate - lRetVal - 3 + (Weekday(lRetVal) + 1) Mod 7)) \ 7 + 1
End Function
Avatar billede amerikaner Nybegynder
04. december 2002 - 09:42 #3
Det er ingen ting forkert....

01-01-03 er i første uge af år 2003 og det er Onsdag (3)
01-01-04 er Torsdag (4)

Det er ikke "hvilken dag i ugen 1" men "hvilken dag i ugen"
Avatar billede joern Nybegynder
04. december 2002 - 09:46 #4
Hej.

Fra VB5 online hjælp.
vbUseSystem    0    Use the NLS API setting.
vbFirstJan1    1    Start with week in which January 1 occurs (default).
vbFirstFourDays    2    Start with the first week that has at least four days in the new year.
vbFirstFullWeek    3    Start with first full week of the year.

Fra mit kalender-projekt.  kal er kalender-objektet fra access

datovalg = kal.Value
  ugenr = DatePart("ww", datovalg, 2, 2)
  dag = DatePart("w", datovalg, 2)        'dag i ugen
  dagnr = DatePart("y", datovalg, 2)      'dag i året
  aar = DatePart("yyyy", datovalg, 2)
  md = DatePart("m", datovalg, 2)
  If Len(md) = 1 Then md = "0" & md
  dato = DatePart("d", datovalg, 2)
  If Len(dato) = 1 Then dato = "0" & dato

M.v.h.  Jørn
Avatar billede terry Ekspert
04. december 2002 - 15:20 #5
ugenr = DatePart("ww", dt, vbMonday, vbFirstFourDays)
dagnr = DatePart("d", dt, vbMonday, vbFirstFourDays)

In Denmark the week starts on a Monday, not on a Sunday as in USA!
Avatar billede terry Ekspert
04. december 2002 - 15:20 #6
and that was an answer
Avatar billede terry Ekspert
04. december 2002 - 15:23 #7
DatePart Function
     

Returns a Variant (Integer) containing the specified part of a given date.

Syntax

DatePart(interval, date[,firstdayofweek[, firstweekofyear]])

The DatePart function syntax has these named arguments:

Part Description
interval Required. String expression that is the interval of time you want to return.
date Required. Variant (Date) value that you want to evaluate.
firstdayofweek Optional. A constant that specifies the first day of the week. If not specified, Sunday is assumed.
firstweekofyear Optional. A constant that specifies the first week of the year. If not specified, the first week is assumed to be the week in which January 1 occurs.



Settings

The interval argument has these settings:

Setting Description
yyyy Year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week
h Hour
n Minute
s Second



The firstdayofweek argument has these settings:

Constant Value Description
vbUseSystem 0 Use the NLS API setting.
vbSunday 1 Sunday (default)
vbMonday 2 Monday
vbTuesday 3 Tuesday
vbWednesday 4 Wednesday
vbThursday 5 Thursday
vbFriday 6 Friday
vbSaturday 7 Saturday



The firstweekofyear argument has these settings:

Constant Value Description
vbUseSystem 0 Use the NLS API setting.
vbFirstJan1 1 Start with week in which January 1 occurs (default).
vbFirstFourDays 2 Start with the first week that has at least four days in the new year.
vbFirstFullWeek 3 Start with first full week of the year.



Remarks

You can use the DatePart function to evaluate a date and return a specific interval of time. For example, you might use DatePart to calculate the day of the week or the current hour.

The firstdayofweek argument affects calculations that use the "w" and "ww" interval symbols.

If date is a date literal, the specified year becomes a permanent part of that date. However, if date is enclosed in double quotation marks (" "), and you omit the year, the current year is inserted in your code each time the date expression is evaluated. This makes it possible to write code that can be used in different years.

Note For date, if the Calendar property setting is Gregorian, the supplied date must be Gregorian. If the calendar is Hijri, the supplied date must be Hijri.

The returned date part is in the time period units of the current Arabic calendar. For example, if the current calendar is Hijri and the date part to be returned is the year, the year value is a Hijri year.
Avatar billede rsa Nybegynder
04. december 2002 - 16:26 #8
Tak for alle svarene. Jeg har lært en masse af alles svar. Jeg troede, at jeg havde godkendt dem, men nu er der kommet flere. Jeg har afprøvet de første svar, og kan med sikkerhed sige, at flemmingdahl´s svar var det eneste rigtige på det tidspunkt. Nu vil jeg gå igennem terry´s store vejledning, og øve mig i denne, her kan jeg sikkert lære en masse. Men prisen går til det første rigtige svar: flemmingdahl.
Endnu engang tak for hjælpen.
Avatar billede amerikaner Nybegynder
05. december 2002 - 09:05 #9
Alle sammen >> Jeg kan stadigvæk ikke "grib" hvad er forkert.

Spotpart har den rigtig svar...lidt kort, men rigtig.
Den eneste ting flemmingdahl's function gøre er lig hvad DatePart gøre med firstdayofweek = vbMonday. 

Terry >> Re: "In Denmark the week starts on a Monday, not on a Sunday as in USA!" - I'm guessing he's in Danmark and has the standard International settings for Danmark so vbUseSystemDayOfWeek and vbUseSystem should do it. 

Så: Anybody care to explain to me why Spotpart's answer was wrong? rsa never said his results were wrong..."Er der nogen der ved, hvordan dette hænger sammen?"...

Just curious :-)
Avatar billede rsa Nybegynder
05. december 2002 - 11:00 #10
Jeg har afprøvet alle svarene, og det eneste der gav det rigtige resultat var flemmingdahl's.
Prøv selv med datoen: 29-12-03. Denne dato giver i næsten alle tilfældene et ugenr: 53 og dag i ugen = 1. Det er forkert. Det skal være uge 1.
Hilsen rsa
Avatar billede terry Ekspert
05. december 2002 - 17:15 #11
amerikaner, I would alos have thought that other answers would have worked. I have NO idea how is PC is set up, but I do know the answer I gave works no matter what the regional settings are.
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