Avatar billede pablo Nybegynder
07. oktober 2002 - 14:27 Der er 7 kommentarer og
3 løsninger

Problem med udregning af tidsrum

Jeg har et problem med udregning af tider. Jeg har brug for at kunne udregne et tidsrum udfra 2 angivet tidspunkter. Jeg kalder en funktion med følgende:

sStartTime = "22:00:00"
sEndTime = "02:00:00"
sTimeDiff = TimeCalc(sStartTime, sEndTime)



Herunder ses en funktion, som en venlig sjæl tidligere hjalp mig med her på Eksperten.
Den fungerer helt fint så længe det første tidspunkt er mindre end det andet. Hvis jeg nu skal udregne tidrummet mellem kl. 22:00 og kl. 02:00, så går det galt.

Kan denne funktion udbygges så den kan tage højde for det?


function TimeCalc(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 = round(60*(diff / (60*60) - hours),0)
    hours = string(2-len(hours),"0") & hours
    mins = string(2-len(mins),"0") & mins

    TimeCalc = hours & ":" & mins
end function
Avatar billede hbhansen Nybegynder
07. oktober 2002 - 14:28 #1
Du kan f.eks. skrive datoen med, og så tage datediff() på det, det skulle virke, det har jeg selv brugt !
Avatar billede the_bma_man Nybegynder
07. oktober 2002 - 14:56 #2
Den nemme løsning
if StartTime > FinishTime then
  FinishTime = FinishTime + <24 timer>
end if

Og så ellers lade resten af funktionen køre.
(Erstat selv <24 timer> med noget fornuftigt :-))
Avatar billede pablo Nybegynder
07. oktober 2002 - 15:08 #3
hbhansen: Det lyder logisk, men hvor vil du placere den i koden?
Jeg bruger allerede en datediff i funktionen, men jeg kan ikke lige overskue hvor du vil bruge datoen.

the bma man: Hvorfor vil du lægge x-antal timer til FinishTime?
Avatar billede luzk Nybegynder
07. oktober 2002 - 15:14 #4
Jeg bruger selv datediff på følgende måde, og der virker det fint:
DateDiff("s",loginTime,logoutTime), hvor loginTime og logoutTime begge er instanser af objektet "Now" (loginTime = Now). Now laver et Date objekt med både dato og tidspunkt, så derfor kan man gøre det på denne måde. I dit eksempel har den kun klokkeslettet, og derfor kan den ikke vide at der skal tælles en dag med.
Det du så kan gøre er at lave dit dato objekt med både dato og tid, og så skulle det virke :o)

/Luzk
Avatar billede hbhansen Nybegynder
07. oktober 2002 - 15:30 #5
Som luzk skriver skal du have et data objekt istedet for kun tiden, det gør at den samtidig tjekker på dato og så er du ude over det med 22:00 og 02:00.
I koden vil jeg sende to datoer, startDato og slutDato til funktionen istedet for to tider!
Avatar billede the_bma_man Nybegynder
07. oktober 2002 - 15:35 #6
Hejsa.
Jeg lægger ikke x-antal timer til - men 24.
Fordi 02.00 + 24 timer = "klokken 26"
fraktrukket kl. 22 = 4 timer - som jo er differencen :-)

Det var for at løse, at din fra-tid er større end slut-tid - hvilket jo indikerer, at vi har rundet midnat - kl. 24. Derfor det magiske tal.
Men som jeg skrev - den "nemme" løsning. Hvis det skal virke over mere en eet døgn er du nødt til, som forklaret af en anden, at bruge et dato objekt i stedet for.
Avatar billede pablo Nybegynder
07. oktober 2002 - 16:10 #7
Ja, hvis jeg sender både dato og tid afsted til funktionen, så fungerer det helt fint!!

Mange tak alle sammen :-)
Avatar billede luzk Nybegynder
07. oktober 2002 - 16:17 #8
Så lidt :o) og tak for point :o)
Avatar billede hbhansen Nybegynder
07. oktober 2002 - 16:24 #9
Det var så lidt, det er jo det eksperten.dk er til for :-)
Avatar billede the_bma_man Nybegynder
07. oktober 2002 - 16:35 #10
Velbekomme - og tak for point - også herfra.
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