Avatar billede rane Nybegynder
03. november 2006 - 09:32 Der er 19 kommentarer og
2 løsninger

Ugenumre igen

Har tidligere lavet en tråd om ugenumre og datoen på mandagen i den pågældende uge, men det fungerede aldrig rigtig.

Har en database-tabel (Access):

UgePeriode, UgeNummerStart, UgeNummerSlut, Aarstal
1, 48, 51, 2006
2, 52, 3, 2007
3, 4, 7, 2007
osv.

Skal have lavet en liste med <input> felter til alle hverdagene i den pågældende ugeperiode, ala:

Uge 48
Mandag <input name="27-11-2006">
Mandag <input name="28-11-2006">
Mandag <input name="29-11-2006">
Mandag <input name="30-11-2006">
Mandag <input name="1-12-2006">

Uge 49
Mandag <input name="4-12-2006">

osv. frem til UgeNummerSlut (51 i dette tilfælde)

Har følgende funktion:

Function finddato(ugenr, aar)
    ugedag = 1
    dato = ugedag & "-01-" & aar
    dag1 = datepart("ww", dato, vbMonday, vbFirstFourDays)
    while dag1 <> 1
        ugedag = ugedag + 1
        dato = ugedag & "-01-" & aar
        dag1 = datepart("ww", dato, vbMonday, vbFirstFourDays)
    wend
    dato = clng(ugedag) & "-01-" & aar
    dato = DateAdd("d", 7*(ugenr-1), dato)
    finddato = dato
end function

Som fungerer fint til og med 2007 datoer. Så snart man når ind i 2008, f.eks. med  finddato(4, 2008) så går der kage i datoen. Datoen afviger med 1 dag fra den rigtige...i 2009 udregner den 3 dage forkert.

Hvordan dææælen fikser jeg dette???
Avatar billede cpufan Juniormester
03. november 2006 - 09:57 #1
den hurtige måde

Function finddato(ugenr, aar)
ugedag = 1
select case aar
case 2008
ugedag = 2
case 2009
ugedag = 3
'osv
end select
' en programmør flipper dog over den måde, men jeg er doven lige nu
 

    dato = ugedag & "-01-" & aar
    dag1 = datepart("ww", dato, vbMonday, vbFirstFourDays)
    while dag1 <> 1
        ugedag = ugedag + 1
        dato = ugedag & "-01-" & aar
        dag1 = datepart("ww", dato, vbMonday, vbFirstFourDays)
    wend
    dato = clng(ugedag) & "-01-" & aar
    dato = DateAdd("d", 7*(ugenr-1), dato)
    finddato = dato
end function
Avatar billede cpufan Juniormester
03. november 2006 - 09:59 #2
det kan være det er henhv. 1 ,3 dage den modsatte vej? jeg har ikke kigge i en kalender
Avatar billede cpufan Juniormester
03. november 2006 - 10:02 #3
hov

select case aar
case 2008
ugedag = 2
case 2009
ugedag = 4
'osv
end select
Avatar billede rane Nybegynder
03. november 2006 - 10:09 #4
heheh, ja den metode ville jeg ikke foretrække.  Mener at ha læst at der er en fejl i en eller anden Microsoft dll-fil?  Ved ikke om det er der, problemet ligger?
Avatar billede cpufan Juniormester
03. november 2006 - 10:18 #5
nej problemet er jo at der i din funktion sætter den første dato i året, hvor der er en mandag :  ugedag = 1

det er holdbart i 2006 og 2007, men så går det galt -
derfor har jeg lagt år 2008 og 2009 ind, du kan selv putte flere ind

den korrekte er så:

select case aar
case 2008
ugedag = 7 ' 1. mandag er den 7.januar
case 2009
ugedag = 5 ' 1. mandag er den 5. januar
'osv
end select

det er nu de korrekte
Avatar billede cpufan Juniormester
03. november 2006 - 10:40 #6
vi kan lave den dynamisk, nu har du jo fået mig startet!
Function finddato(ugenr, aar)
ugedag = 1
for i = 1 to 7
dato = i &"-01-"&aar
if Lcase(WeekdayName(weekday(dato))) = "mandag" then ugedag = i
next
    dato = ugedag & "-01-" & aar
    dag1 = datepart("ww", dato, vbMonday, vbFirstFourDays)
    while dag1 <> 1
        ugedag = ugedag + 1
        dato = ugedag & "-01-" & aar
        dag1 = datepart("ww", dato, vbMonday, vbFirstFourDays)
    wend
    dato = clng(ugedag) & "-01-" & aar
    dato = DateAdd("d", 7*(ugenr-1), dato)
    finddato = dato
end function

nu kører den dynamisk alle år
Avatar billede cpufan Juniormester
03. november 2006 - 10:41 #7
vi skal måske lige gå med livrem og seler:

if (Lcase(WeekdayName(weekday(dato))) = "mandag") OR (Lcase(WeekdayName(weekday(dato))) = "monday") then ugedag = i
Avatar billede cpufan Juniormester
03. november 2006 - 10:50 #8
og lidt mere sikker igen igen:

for i = 1 to 7
dato = aar&"-01-"&i
Avatar billede rane Nybegynder
03. november 2006 - 10:51 #9
Får en
Microsoft VBScript runtime  error '800a000d'

Type mismatch: 'dato'

/nyt/kok.asp, line 85

det er denne linje:
dag1 = datepart("ww", dato, vbMonday, vbFirstFourDays)
Avatar billede cpufan Juniormester
03. november 2006 - 10:57 #10
Function finddato(ugenr, aar)
ugedag = 1
for i = 1 to 7
dato = aar&"-1-"&i
if Lcase(WeekdayName(weekday(dato))) = "mandag" then ugedag = i
next
    dag1 = datepart("ww", dato, vbMonday, vbFirstFourDays)
    while dag1 <> 1
        ugedag = ugedag + 1
        dato = aar &"-1-"&ugedag
        dag1 = datepart("ww", dato, vbMonday, vbFirstFourDays)
    wend
    dato = DateAdd("d", 7*(ugenr-1), dato)
    finddato = dato
end function
Avatar billede rane Nybegynder
03. november 2006 - 11:01 #11
hm..stadig det samme...skuummelt
Avatar billede rane Nybegynder
03. november 2006 - 11:06 #12
Jeg kører et loop og den fejl opstår først når den bearbejder 4. uge i år 2008 :(
Avatar billede rane Nybegynder
03. november 2006 - 11:07 #13
Noget at gøre med skud-år?
Avatar billede cpufan Juniormester
03. november 2006 - 11:08 #14
næ det tror jeg ikke
Avatar billede cpufan Juniormester
03. november 2006 - 11:09 #15
åhhh vi sætter md fast øjeblik
Avatar billede cpufan Juniormester
03. november 2006 - 11:14 #16
prøv lige denne her:
jeg er ikke sikker på den er skudsikker, men så jeg kan vurdere,

Function finddato(ugenr, aar)
ugedag = 1
for i = 1 to 7
dato = aar&"-1-"&i
if Lcase(WeekdayName(weekday(dato))) = "mandag" then ugedag = i
next
dato = aar&"-1-"&ugedag
    dato = DateAdd("d", 7*(ugenr-1), dato)
    finddato = dato
end function
Avatar billede rane Nybegynder
03. november 2006 - 11:18 #17
yes sir! Umiddelbart ser den god ud...får i hvert fald de rigtige datoer frem i 2008 nu og uge 4 i 2009 stemmer også fint med datoen.

Hvad gjorde du egentlig med funktionen?  Synes den ser så mager ud lige pludselig...normalt plejer bugfix at fylde mere??
Avatar billede cpufan Juniormester
03. november 2006 - 11:19 #18
øhm nu er jeg vist kørt af sporet,

det du vil er at finde datoen på den mandag der er i det ugenummer du har - ikke også?
Avatar billede cpufan Juniormester
03. november 2006 - 11:21 #19
nå hvis det er det her du skal bruge, så er det jo ok,

ja men der var en masse fnidder i den tidligere kode
Avatar billede rane Nybegynder
03. november 2006 - 11:23 #20
Jep det var bare datoen for mandagen, jeg skulle bruge :) Jeg takker mange gange.
Avatar billede cpufan Juniormester
03. november 2006 - 11:25 #21
fino - tak for point
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