Avatar billede geagleeye Nybegynder
10. maj 2006 - 10:58 Der er 12 kommentarer

Tjek beregning af ugenr

Hey eksperter.

Jeg skal til at regne på nogle ugenr...det er sådan at jeg skal regne på ugenr i forhold til et dato som er 01-01-1900.
dvs antalet af uger der er gået siden 01-01-1900...

min procedure ser således ud:

dim ValueYearFrom  as date
ValueYearFrom = "01-01-2006"

If ValueYearFrom <> 0 Then
    dtmStartDato = DateSerial(1900, 1, 1)
    a = (Fix(DateDiff("d", dtmStartDato, ValueYearFrom) / 7))
End If

jeg får resultate 5533 uger er det rigtigt ??
jeg bliver lidt i tvivl når man begynder at snakke om hvornår
ugen starter i året og antalet af uger i de forskellige år ?
er det regnet med her i vb funktionerne ?
Avatar billede geagleeye Nybegynder
10. maj 2006 - 11:00 #1
og hvis jeg tager den sådan her :

If ValueYearFrom <> 0 Then
    dtmStartDato = DateSerial(1900, 1, 1)
    a = (Fix(DateDiff("w", dtmStartDato, ValueYearFrom)))
End If
får jeg 5478 ???
Avatar billede excelent Ekspert
10. maj 2006 - 19:27 #2
hmm jeg får lidt andre værdier med følgende sub:

Sub tst()
Dim Fra As Date
Dim Til As Date
Dim Msg
Fra = InputBox("Fra dato ")
Til = InputBox("Til dato ")
Msg = "Antal uger : " & DateDiff("ww", Fra, Til, vbMonday, vbUseSystem): MsgBox Msg '1 ugedag=mandag
Msg = "Antal uger : " & DateDiff("ww", Fra, Til, vbSunday, vbUseSystem): MsgBox Msg '1 ugedag=søndag

End Sub
Avatar billede bak Forsker
11. maj 2006 - 22:46 #3
Det kan også gøres sådan, fordi netop 1-1-1900 er første dag i VB's datosystem og da der tælles op herfra. Dvs at "01-01-2006" er dag 38718. Idet dag 1 er en lørdag og uger normalt regnes fra mandag trækkes to dage fra din dato (vbMonday = 2) og der heltalsdelen af dette divideret med 7 findes

Dim ValueYearFrom As Date
ValueYearFrom = "01-01-2006"
If ValueYearFrom <> 0 Then
    a = (ValueYearFrom - vbMonday) \ 7
end If
Avatar billede bak Forsker
11. maj 2006 - 22:59 #4
OBS
Her er tale om europæriske uger, hvor uge 1 er den første uge der undeholder en torsdag. (ISO-norm)
Ved amerikanske uger lægges 1 til resultatat, som er (ISO) 5530
Avatar billede fizz Nybegynder
15. maj 2006 - 16:41 #5
bla bla og røven den går... brug denne function... den er indstillet til europæisk og slt det de andre snakker om:

Function WOY(MyDate As Date) As Integer    ' Week Of Year
  WOY = Format(MyDate, "ww", vbMonday, vbFirstFourDays)
  If WOY > 52 Then
    If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then WOY = 1
  End If
End Function
Avatar billede excelent Ekspert
15. maj 2006 - 19:24 #6
Det var dog en slem fin funktion du har der, mon den kan bruges til noget?
Avatar billede bak Forsker
15. maj 2006 - 22:10 #7
I hvert fald ikke til dette spørgsmål :-)
Avatar billede excelent Ekspert
15. maj 2006 - 22:20 #8
nope :-)
Avatar billede geagleeye Nybegynder
16. maj 2006 - 10:30 #9
hmmm.... hvad skal jeg holde mig til nu :(
Avatar billede geagleeye Nybegynder
16. maj 2006 - 10:32 #10
jeg har to variabler som er erklæret som integer.
yearfrom, weekfrom
2006    ,  18

dvs. at jeg skal finde ugenr for uge 18 i 2005 i forhold til 1-1-1900 ?
Avatar billede bak Forsker
16. maj 2006 - 13:12 #11
Prøv med denne funktion.

Function AntalUger(år, uge)
  Dim UgensDato As Date
  UgensDato = DateSerial(år, 1, 7 * uge - 3 - Weekday(DateSerial(år, 0, 0), 3))
  AntalUger = (UgensDato - vbMonday) \ 7
End Function
Avatar billede bak Forsker
27. maj 2006 - 19:25 #12
gav du op, geagleeye ?
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