Avatar billede chaser64 Nybegynder
29. november 2005 - 14:57 Der er 11 kommentarer

Find ugenummer ud fra dato

Hej Eksperter,

Jeg har en database (MSSQL) med en masse statistik for mine besøgende.

Nu vil jeg gerne opdele besøgende efter dag, uge, måned osv...

Dag og måned er nemt nok, men hvordan for jeg sorteret de besøgende efter ugenummeret?

Jeg har ikke været heldig med at finde noget kode som kan hjælpe mig :o(

Kan I???


/Chaser
Avatar billede hnteknik Novice
29. november 2005 - 15:01 #1
function ugenummer (d,m,y) {
                              var t,wd,yd,thisThursday,week,nY,pY;
                              // d:1..31 m:0..11 y:fircifret årstal
                              //#en dag har samme ugenr som torsdagen i samme uge
                              t = new Date (y,m,d);
                              wd = t.getDay();
                              yd = yday(y,m,d);
                              if (wd == 0) wd = 7;
                              d = d + 4 - wd;
                              yd = yd + 4 - wd;
                              nY = (m == 11); if (nY) nY = (d > 31);
                              pY = (m ==  0); if (pY) pY = (d <  1);
                              if (nY) {
                                m= 0; d= d-31; y++; 
                                yd = yday(y,m,d);
                              } else if (pY) {
                                m=11; d= d+31; y--; 
                                yd = yday(y,m,d);
                              }
                              thisThursday = yd;
                              t = new Date (y,0,1);
                              wd = t.getDay();
                              yd = yday(y,0,1);
                              if (wd > 4) wd = wd - 7;
                              yd = yd + 4  - wd;
                              week = (thisThursday - yd) / 7 + 1;
                              return week;
                          }
Avatar billede fennec Nybegynder
29. november 2005 - 15:04 #2
Function getWeekNr(FunkDate)
dim returval
  returval = datepart("ww",FunkDate,2,2)
  if returval > 52 then
    if datepart("ww",dateadd("d",7,FunkDate),2,2) = 2 then returval = 1
  end if
  getWeekNr = returval
End Function
Avatar billede hnteknik Novice
29. november 2005 - 15:06 #3
How skal du ikke lot group by week i sql sætningen ??

Det har da ikke noget med ASP at gøre ?!
Avatar billede fennec Nybegynder
29. november 2005 - 15:19 #4
Du skal også passe lidt på med ugenumre...

Hvis dine data løber længere end et år, begynder de jo at gå igen. Desuden lagde den 1. jan i uge 53 i år, og 31. dec kommer til ligge i uge 52...
Avatar billede hnteknik Novice
29. november 2005 - 15:38 #5
Den er jeg squ ikke helt med på. 1-2 jan 05 skal ligge i uge 53 og 31. dec 05 skal ligge i uge 52.

Du kan selv løbe det igennem her:
http://www.solit4u.dk/kalender/default.asp?M=1&Y=2005
Avatar billede fennec Nybegynder
29. november 2005 - 15:46 #6
hnteknik >>
Også min pointe... Hvis de skal sorteres efter ugenummer, kommer 1-2 jan til at ligge efter 31. dec, hvilket selvfølgelig ikke giver nogen mening :o)

Vi skal nok have chaser64 til at forklare lidt nærmere hvad det er han ønsker...
Avatar billede hnteknik Novice
29. november 2005 - 16:06 #7
fennec>>

Ja man skal nok lave et lb nr til hver uge i året

1. uge (53) lbnr 1 osv. og sortere på lbnr.
Avatar billede chaser64 Nybegynder
29. november 2005 - 21:55 #8
Nærmere forklaring:
Mit resultat skal være således

Start Dato: 01-01-05
Slut Dato: 14-01-05

Uge 1: 56 besøgende
Uge 2: 54 besøgende
Avatar billede chaser64 Nybegynder
29. november 2005 - 21:56 #9
Man indtaster selv perioden (startdato og slutdato)...
Avatar billede fennec Nybegynder
30. november 2005 - 09:06 #10
Hvis du kan leve med at bruge det amerikanske ugeformat (IKKE det vi bruger i DK), kan du gøre det direkte i SQL:
select count(id) as antal, datepart(ww,dato) as weekNr from visit where dato>='20050101' and dato<='20050114' group by year(dato), datepart(ww,dato) order by year(dato), datepart(ww,dato)

Skal de der imod være DK ugenumre, hvad det jo nok skal, skal det laves i koden (ikke testet):

set rs = conn.execute("select count(id) as antal, dato from visit where dato>='20050101' and dato<='20050114' group by dato order by dato")
oldWeek = ""
counter = 0
while not rs.eof
  if oldWeek = "" then
    oldWeek = getWeekNr(rs("dato"))
    rsponse.write "Uge " &oldWeek
  end if
  if oldWeek <> getWeekNr(rs("dato")) then
    rsponse.write counter & "<br>"
    counter = 0
    rsponse.write "Uge " &getWeekNr(rs("dato"))
  end if
  counter = counter + rs("antal")
  rs.MoveNext
wend
rsponse.write counter & "<br>"
Avatar billede hnteknik Novice
06. september 2006 - 10:24 #11
Lukke ???
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