Avatar billede Jman Praktikant
20. marts 2003 - 20:57 Der er 10 kommentarer og
1 løsning

Eagleeye (og andre...) hjælp med resten af beregningen

Jeg har tigligere fået hjælp til en tidsberegning v.h.a. DateDiff. Den ser således ud:

<%
function sTimeCalc(StartTime, FinishTime)
Dim diff, mins, hours, secs
diff = datediff("s",StartTime,FinishTime)
'set the minutes ignoring the remaining fraction
hours = int(diff / (60*60))
' set the minutes by using the remaining fraction and multiplying by 60 i.e., .5 * 60 = 30
mins = Int(60*(diff / (60*60) - hours))
secs = Int(diff - ((60*60)* hours) - (60 * mins))
hours = Right("0" & hours,2)
mins = Right("0" & mins,2)
secs = Right("0" & secs,2)
sTimeCalc = hours & ":" & mins & ":" & secs
end function
%>

i min kode har jeg lavet dette:
            <%    sqltid="SELECT * From tidsforbrug Where opgavenr = '" & request("ID") & "' order by id asc"
                set rstid = conn.execute(sqltid)
            %>       
<% do while not rstid.EOF %>
<%
If rstid("eventting") = "START " Then
  eventstart = rstid("tid")
  tidsforbrug = ""
Else
  eventstop = rstid("tid")
  tidsforbrug = sTimeCalc(eventstart, eventstop)
%>
<% end if %>
<%rstid.movenext%>
<%loop%>

<%Response.write tidsforbrug%>

Mit problem er nu at den godt nok beregner tiden mellem start og stop... MEN, men men det er kune den sidste start/stop i tabellen, der bliver beregnet.
Da start/stop kan forekomme flere gange skal jeg derfor har lavet en udregning, der viser den totale forskel mellem alle start/stop.
Forvirret? - o.k. en lidt bedre forklaring:
I en tabel har jeg en eventting, der enten kan være start eller stop efterfulgt af et timestamp.
jeg skal have beregnet forskellen på start & stop | start & stop | start & stop (altså den tid, der er mellem hver start og stop. Og til sidst skal de mellemliggende tider ligges samen.
Avatar billede mortrr Praktikant
20. marts 2003 - 21:07 #1
En hurtig metode:
Hvis du kun skal udskrive forskellene kan du gøre det inde i loopet, og samtidigt tælle sammen i en anden variabel.

Det forudsætter selvfølgelig at du hele tiden har par af start og stop i den rigtige rækkefølge.

<%
    sqltid="SELECT * From tidsforbrug Where opgavenr = '" & request("ID") & "' order by id asc"
    SamletForbrug=0
    set rstid = conn.execute(sqltid)
    do while not rstid.EOF
      If rstid("eventting") = "START " Then
        eventstart = rstid("tid")
        tidsforbrug = ""
      Else
        eventstop = rstid("tid")
        tidsforbrug = sTimeCalc(eventstart, eventstop)
        SamletForbrug=SamletForbrug+tidsforbrug
        Response.write "<br>" & tidsforbrug
      end if
      rstid.movenext
    loop
Response.write "<br>" & SamletForbrug
%>
Avatar billede mortrr Praktikant
20. marts 2003 - 21:08 #2
Sorry - studerede ikke nærmere sTimeCalc - den returnerer en streng, så den kan ikke umiddelbart bruges.

Øjeblik
Avatar billede Jman Praktikant
20. marts 2003 - 21:11 #3
jeg kan sagtens leve med at den samlede tid returneres i par, men der skal stadig være forbehold for at den sidste post kan være "start". Altså så den smalede tid beregnes fra og med den sidste "stop"
Avatar billede mortrr Praktikant
20. marts 2003 - 21:14 #4
Ny funkion til udskrift af tiden, som bare skal have et antal sekunder.
Og den "fodres" så selvfølgelig lidt anderledes.

<%
function strSecondFormat(diff)
  Dim mins, hours, secs
  diff =
  'set the minutes ignoring the remaining fraction
  hours = int(diff / (60*60))
  ' set the minutes by using the remaining fraction and multiplying by 60 i.e., .5 * 60 = 30
  mins = Int(60*(diff / (60*60) - hours))
  secs = Int(diff - ((60*60)* hours) - (60 * mins))
  hours = Right("0" & hours,2)
  mins = Right("0" & mins,2)
  secs = Right("0" & secs,2)
  sTimeCalc = hours & ":" & mins & ":" & secs
end function

    sqltid="SELECT * From tidsforbrug Where opgavenr = '" & request("ID") & "' order by id asc"
    SamletForbrug=0
    set rstid = conn.execute(sqltid)
    do while not rstid.EOF
      If rstid("eventting") = "START " Then
        eventstart = rstid("tid")
      Else
        eventstop = rstid("tid")
        TimeDif=datediff("s",eventstart ,eventstop)
        SamletForbrug=SamletForbrug+TimeDif
        tidsforbrug = strSecondFormat(TimeDiff)
        Response.write "<br>" & tidsforbrug
      end if
      rstid.movenext
    loop
Response.write "<br>" & strSecondFormat(SamletForbrug)
%>
Det ser lidt mere rigtigt ud.
Avatar billede mortrr Praktikant
20. marts 2003 - 21:15 #5
Der sker ikke noget ved at den sidste er stop. Den vil ikke have nogen indflydelse.
Avatar billede mortrr Praktikant
20. marts 2003 - 21:17 #6
Fjen lige den Diff= i funktionen. Den fik jeg ike slette.
Avatar billede Jman Praktikant
20. marts 2003 - 21:31 #7
ok - har prøvet den nu. Jeg får en masse breaks (svarende til antal poster), men der er ingen tekst (?)
Avatar billede mortrr Praktikant
20. marts 2003 - 21:35 #8
function strSecondFormat(diff)
  Dim mins, hours, secs
  diff =
  'set the minutes ignoring the remaining fraction
  hours = int(diff / (60*60))
  ' set the minutes by using the remaining fraction and multiplying by 60 i.e., .5 * 60 = 30
  mins = Int(60*(diff / (60*60) - hours))
  secs = Int(diff - ((60*60)* hours) - (60 * mins))
  hours = Right("0" & hours,2)
  mins = Right("0" & mins,2)
  secs = Right("0" & secs,2)
  strSecondFormat = hours & ":" & mins & ":" & secs
end function

Man skal jo lige returnere værdien ;-)
Sorry
Avatar billede Jman Praktikant
20. marts 2003 - 21:39 #9
... og uden diff=  :)

tester den lige
Avatar billede Jman Praktikant
20. marts 2003 - 21:46 #10
det virker sgu ...!!!!! Jubii :D

WEEEEeeeeee...

Tak for hjælpen - tæsk lige et svar ind
Avatar billede mortrr Praktikant
20. marts 2003 - 21:48 #11
God fornøjelse
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