Avatar billede lasserasch Juniormester
15. oktober 2005 - 23:46 Der er 12 kommentarer og
1 løsning

Hvordan finder man dato'er i en bestemt uge?

Hejsa.

Håber en kan hjælpe.

Jeg har brug for at finde dato'er i en bestemt uge.

F.eks. uge 44.

Der har jeg brug for et script som ud fra en variabel der kunne hedde "week" og være sat til "44" kunne beregne dato'er som er i denne uge, og så sætte disse informationer ind i 7 andre variabler. En for hver dag.
F.eks.

mandag  = "14-10-2005"
tirsdag = "15-10-2005"
onsdag  = "16-10-2005"

osv...

Hvordan gør man det?
Håber i vil give mig en hjælpende hånd med at løse denne udfordring!

Mvh.
Lasse Rasch
Avatar billede arne_v Ekspert
16. oktober 2005 - 00:04 #1
forslag:

<%
y = 2005
w = 44
d = CDate("1-Jan-" & y)
While DatePart("ww", d, vbMonday, vbFirstFourDays) > 1
    d = d + 1
Wend
While DatePart("ww", d, vbMonday, vbFirstFourDays) < w
    d = d + 1
Wend
Response.Write "Mandag = " & CStr(d) & "<br>"
d = d + 1
Response.Write "Tirsdag = " & CStr(d) & "<br>"
d = d + 1
Response.Write "Onsdag = " & CStr(d) & "<br>"
d = d + 1
Response.Write "Torsdag = " & CStr(d) & "<br>"
d = d + 1
Response.Write "fredag = " & CStr(d) & "<br>"
%>
Avatar billede lasserasch Juniormester
16. oktober 2005 - 00:10 #2
Jeps.... Det var lige det jeg manglede. Jeg forstår ikke helt denne del af scriptet :

d = CDate("1-Jan-" & y)
While DatePart("ww", d, vbMonday, vbFirstFourDays) > 1
    d = d + 1
Wend
While DatePart("ww", d, vbMonday, vbFirstFourDays) < w
    d = d + 1
Wend

Jeg er godt klar over at man finder ugenummeret med : DatePart("ww", d, vbMonday, vbFirstFourDays)

Men resten er lidt forvirrende... Hvis du hurtigt kan forklare hvad de forskellige ting gør ville det være supert! (Det er altid rart at forstå de koder man benytter sig af!!!)

Giv lige et svar, så får du points!
Avatar billede softspot Forsker
16. oktober 2005 - 00:22 #3
While DatePart("ww", d, vbMonday, vbFirstFourDays) > 1
    d = d + 1
Wend

finder den første uge (1/1 kan jo risikere at være uge 53 som i år)

While DatePart("ww", d, vbMonday, vbFirstFourDays) < w
    d = d + 1
Wend

finder den uge du er på jagt efter
Avatar billede softspot Forsker
16. oktober 2005 - 00:25 #4
Jeg havde lige et alternativ til dig (selvom jeg ved arne kom først :))

<%
function findFirstDateOfWeek(weekNo)
  firstOfYear = CDate(Year(now) & "-01-01")
  firstWeek = DatePart("ww", firstOfYear, vbMonday, vbFirstFourDays)
  firstWeekDay = DatePart("w", firstOfYear, vbMonday, vbFirstFourDays)

  if firstWeek > 1 then
    firstWeekOfYear = DateAdd("d", 8-firstWeekDay, firstOfYear)
  else
    firstWeekOfYear = firstOfYear
  end if

  actualWeekOfYear = DateAdd("ww", weekNo-1, firstWeekOfYear)
  findFirstDateOfWeek = actualWeekOfYear
end function

d = findFirstDateOfWeek(44)
Response.Write "Mandag = " & CStr(d) & "<br>"
d = d + 1
Response.Write "Tirsdag = " & CStr(d) & "<br>"
d = d + 1
Response.Write "Onsdag = " & CStr(d) & "<br>"
d = d + 1
Response.Write "Torsdag = " & CStr(d) & "<br>"
d = d + 1
Response.Write "fredag = " & CStr(d) & "<br>"
%>

Et eller andet sted forventer jeg at den er hurtigere, men hvis den kun skal bruges en gang i timen, så er det nok marginalt hvad du vinder :)
Avatar billede lasserasch Juniormester
16. oktober 2005 - 01:02 #5
Ok. Jeg har nu sidder og leget lidt med den som arne gav... Det er sikkert mig, som laver en dum fejl, men burde følgende ikke virke?

                        y = 2005
                        w = request.querystring("uge")
            d = CDate("1-Jan-" & y)
            While DatePart("ww", d, vbMonday, vbFirstFourDays) > 1
                d = d + 1
            Wend
            While DatePart("ww", d, vbMonday, vbFirstFourDays) < w
                d = d + 1
            Wend
            Mandag  = CStr(d)
            d = d + 1
            Tirsdag = CStr(d)
            d = d + 1
            Onsdag  = CStr(d)
            d = d + 1
            Torsdag = CStr(d)
            d = d + 1
            Fredag  = CStr(d)
            d = d + 1
            Lordag  = CStr(d)
            d = d + 1
            Sondag  = CStr(d)



Hvis jeg sætter w = 44, så virker det hele fint. Men hvis jeg kalder min side med ?uge=45 og så overstående kode, så virker det ikke.

Dvs. det er som om mit script kører fast, eller i ring.
Jeg har nu 2 gange oplevet at den kommer efter virkelig lang tid, men at den så sætter dato'erne til 01-01-2005, 02-01-2005 osv...

Nogen ide om hvorfor det sker?
Avatar billede softspot Forsker
16. oktober 2005 - 01:05 #6
Det kan være du skal lave en eksplicit konvertering af parameteren:

w = cint(request.querystring("uge"))
Avatar billede lasserasch Juniormester
16. oktober 2005 - 01:10 #7
Øhhh.... Hvad mener du?
Avatar billede softspot Forsker
16. oktober 2005 - 01:12 #8
Den er dog "farlig" idet der sker en kørselsfejl hvis der ikke er specificeret en uge. Så du skal finde ud af hvad der skal ske hvis man ikke specificerer en uge, f.eks. default til aktuelle uge, eller vise en fejl.

Default til aktuelle uge ville se således ud:

if (request.querystring("uge") & "") <> "" then
  if isNumeric(request.querystring("uge")) then
    w = cint(request.querystring("uge"))
  else
    w = DatePart("ww", now, vbMonday, vbFirstFourDays)
  end if
else
  w = DatePart("ww", now, vbMonday, vbFirstFourDays)
end if
Avatar billede softspot Forsker
16. oktober 2005 - 01:13 #9
Ja, altså skifte linie 2 i den kode du viste ud med den linie jeg skrev...
Avatar billede lasserasch Juniormester
16. oktober 2005 - 01:18 #10
Jepper så virkede det! Hmmm... Man lærer lidt hver dag!
Avatar billede softspot Forsker
16. oktober 2005 - 01:20 #11
Ja, det er rart når man kan sige det inden man går i seng... :)
Avatar billede arne_v Ekspert
19. oktober 2005 - 21:04 #12
hvis nu softspot og mig ligger et svar ...
Avatar billede lasserasch Juniormester
19. oktober 2005 - 21:23 #13
Ja, nu får du bare points arne!
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