Avatar billede n_riber Nybegynder
08. august 2001 - 19:42 Der er 10 kommentarer og
1 løsning

Har brug for hjælp til at konverterer et tal til et årstal+måned+dato

Jeg har et mindre problem, som jeg skal have køst og helst inden 22 iaften (08.08.2001).
jeg har en Access2000 DB hvor posterne er oprette efter vores lokale system, hvor lotnr består af årstal uge og dag(eks. 2000401) for mandag i uge 40, nu skal jeg have dette konverteret til datoen for denne dag + alle andre poster.

Hvem kan Hjælpe ?
Avatar billede johs_j Novice
08. august 2001 - 20:45 #1
Har du prøvet at formatere feltet til datoformat.
Avatar billede n_riber Nybegynder
08. august 2001 - 20:52 #2
ja, det lader sig ikke umiddelbart gøre da jeg så havner i år 7383
Avatar billede region Nybegynder
08. august 2001 - 21:19 #3
hvordan ville du gerne have 20000401 skulle se ud..??
Avatar billede terry Ekspert
08. august 2001 - 21:24 #4
n_riber>

is that 2000 40 1
where 2000 = year
40 = week and 1 Monday
?
Avatar billede n_riber Nybegynder
08. august 2001 - 21:27 #5
terry>>>> correct

Region>>>jeg vil gerne have 2000401 til at vise datoen for den pågældende dag som var 02-10-2000
mandag = 1
Avatar billede terry Ekspert
08. august 2001 - 21:48 #6
n_riber I think I can help but the network is standing almost still at the moment, so 22 is a little optimistic! Can you wait?
Avatar billede n_riber Nybegynder
08. august 2001 - 21:49 #7
i lookslike i\'ll be working til 22.30 or 23.00

I\'ve got time.
Avatar billede n_riber Nybegynder
08. august 2001 - 21:50 #8
lokkslike= looks like
Avatar billede terry Ekspert
08. august 2001 - 22:07 #9
Place this in a module

Function YYYYWW2Date(ByVal varYear As Integer, ByVal varWeekNo As Integer) As Date

Function complies with DS/EN 28601.
\' Monday is always the first day of the week (also if its in previos year).
\' Week 1 is the first week of the year containing at least four days and will always contain
\' the first Thirsday of the year.

\' This function also assumes that the WW part is the week which commences in the YYYY part.
\' This is because some years have the same week number twice, for example week 52 in year 2000.

  Dim v As Variant
  Dim varMonday As Variant

    \'Find first manday of year
    varMonday = DateSerial(varYear, 1, 1)          \'first day of year
    While WeekDay(varMonday) <> 2                  \'weekday() has monday as day 2 of week
        varMonday = DateAdd(\"d\", 1, varMonday)      \'add a day until we have the first monday
    Wend

    \'Returns date
    v = DateSerial(varYear, 1, (varWeekNo - 1) * 7 + Day(varMonday)) \'v er her søndagen i den pågældende uge

    \'If the first Monday of the year is in week we need to subtract a week. (EG:2002)
    varWeekNo = val(Format$(varMonday, \"ww\", vbMonday, vbFirstFourDays))
    If varWeekNo = 2 Then
        v = DateAdd(\"d\", -7, v)
    End If
 
    YYYYWW2Date = v

End Function

I dont know how you are going to update the field but you can use this to convert the year and weeknumber to a date which will always be a monday, then the DateAdd adds the day to get to the correct day of the week..

I havent checked this call but its soemthing like this

DateAdd( \"d\", right([fldName],1)-1, YYYYWW2Date( Left([fldname],4), Mid([fldName], 5,2)))


Avatar billede terry Ekspert
09. august 2001 - 09:52 #10
I have now tested it, and it does work as expected!

You can use it in a select such as this:

SELECT TheTable.YYYYWWD, DateAdd(\"d\",Right([YYYYWWD],1)-1,YYYYWW2Date(Left([YYYYWWD],4),Mid([YYYYWWD],5,2))) AS Dato
FROM Thetable;
Avatar billede n_riber Nybegynder
09. august 2001 - 16:40 #11
Thanx Terry, you just saved my Ass.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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