Avatar billede Slettet bruger
22. oktober 2005 - 17:16 Der er 6 kommentarer og
1 løsning

Hvor længe siden?

Hej,

Jeg har brug for en funktion, der tager en dato (fra mySQL) som parameter og returnerer, hvor længe det er siden.

Exempel:
5 minutter siden
4 timer og 50 minutter siden
2 dage og 5 timer siden
3 uger, 4 dage og 6 timer siden

er der  nogen der kan strikke det sammen?
Avatar billede softspot Forsker
22. oktober 2005 - 17:56 #1
Hmmm... lidt primitiv, men prøv denne:

function tidSiden(dato)
  idiff = DateDiff("n", dato, now, vbMonday, vbFirstFourDays)
  iminutter = cint(idiff mod 60) - 1
  itimer = cint((idiff / 60) mod 24) - 1
  idage = cint((idiff / (24 * 60)) mod 7) - 1
  iuger = cint(idiff / (7 * 24 * 60)) - 1
 
  strDiff = ""
  if iuger > 0 then
    strDiff = iuger & " uger"
  end if
  if idage > 0 then
    if len(strDiff) > 0 then
      strDiff = strDiff & ", "
    end if
    strDiff = strDiff & idage & " dage"
  end if
  if itimer > 0 then
    if len(strDiff) > 0 then
      strDiff = strDiff & ", "
    end if
    strDiff = strDiff & itimer & " timer"
  end if
  if iminutter > 0 then
    if len(strDiff) > 0 then
      strDiff = strDiff & ", "
    end if
    strDiff = strDiff & iminutter & " minutter"
  end if
 
  iPos = instrrev(strDiff, ",")
  strDiff = left(strDiff, iPos) & replace(strDiff, ",", " og", iPos, -1)
 
  tidSiden = strDiff
end function
Avatar billede Slettet bruger
23. oktober 2005 - 12:47 #2
den virker - næsten.

Den fejler, således at datoen

16-10-2005 01:58:07 = 10 timer, og 44 minutter siden

--> rigtigt

23-10-2005 10:57:16 = 1 time, og 45 minutter siden


--> forkert
Avatar billede softspot Forsker
23. oktober 2005 - 20:58 #3
OK, jeg har lige haft rutinen igennem testmøllen og ja, der var nogle fejl i den. Den rettede og noget bedre testede version ser således ud:

function tidSiden(dato)
  idiff = DateDiff("n", dato, now, vbMonday, vbFirstFourDays)
  iminutter = fix(idiff mod 60)
  itimer = fix(int(idiff / 60) mod 24)
  idage = fix(int(idiff / (24 * 60)) mod 7)
  iuger = fix(idiff / (7 * 24 * 60))
 
  response.Write "[" & idiff & ": " & idiff / (7 * 24 * 60) & "," & int(idiff / (24 * 60)) mod 7 & "," & int(idiff / 60) mod 24 & "," & idiff mod 60 & "] "
  strDiff = ""
  if iuger > 0 then
    strDiff = iuger & " uge"
    if iuger > 1 then
      strDiff = strDiff & "r"
    end if
  end if
  if idage > 0 then
    if len(strDiff) > 0 then
      strDiff = strDiff & ", "
    end if
    strDiff = strDiff & idage & " dag"
    if idage > 1 then
      strDiff = strDiff & "e"
    end if
  end if
  if itimer > 0 then
    if len(strDiff) > 0 then
      strDiff = strDiff & ", "
    end if
    strDiff = strDiff & itimer & " time"
    if itimer > 1 then
      strDiff = strDiff & "r"
    end if
  end if
  if iminutter > 0 then
    if len(strDiff) > 0 then
      strDiff = strDiff & ", "
    end if
    strDiff = strDiff & iminutter & " minut"
    if iminutter > 1 then
      strDiff = strDiff & "ter"
    end if
  end if
 
  iPos = instrrev(strDiff, ",")
  if iPos > 0 then
    strDiff = left(strDiff, iPos - 1) & replace(strDiff, ",", " og", iPos, -1)
  end if
 
  tidSiden = strDiff
end function
Avatar billede softspot Forsker
23. oktober 2005 - 21:00 #4
...og så en version uden testudskrift :)

function tidSiden(dato)
  idiff = DateDiff("n", dato, now, vbMonday, vbFirstFourDays)
  iminutter = fix(idiff mod 60)
  itimer = fix(int(idiff / 60) mod 24)
  idage = fix(int(idiff / (24 * 60)) mod 7)
  iuger = fix(idiff / (7 * 24 * 60))
 
  strDiff = ""
  if iuger > 0 then
    strDiff = iuger & " uge"
    if iuger > 1 then
      strDiff = strDiff & "r"
    end if
  end if
  if idage > 0 then
    if len(strDiff) > 0 then
      strDiff = strDiff & ", "
    end if
    strDiff = strDiff & idage & " dag"
    if idage > 1 then
      strDiff = strDiff & "e"
    end if
  end if
  if itimer > 0 then
    if len(strDiff) > 0 then
      strDiff = strDiff & ", "
    end if
    strDiff = strDiff & itimer & " time"
    if itimer > 1 then
      strDiff = strDiff & "r"
    end if
  end if
  if iminutter > 0 then
    if len(strDiff) > 0 then
      strDiff = strDiff & ", "
    end if
    strDiff = strDiff & iminutter & " minut"
    if iminutter > 1 then
      strDiff = strDiff & "ter"
    end if
  end if
 
  iPos = instrrev(strDiff, ",")
  if iPos > 0 then
    strDiff = left(strDiff, iPos - 1) & replace(strDiff, ",", " og", iPos, -1)
  end if
 
  tidSiden = strDiff
end function
Avatar billede Slettet bruger
24. oktober 2005 - 00:45 #5
smukt - takker! smid et svar :)
Avatar billede softspot Forsker
24. oktober 2005 - 00:50 #6
Vær' så god - og velbekomme :)
Avatar billede softspot Forsker
24. oktober 2005 - 09:44 #7
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