Avatar billede cygnet Praktikant
27. februar 2006 - 22:26 Der er 21 kommentarer og
1 løsning

udregning af antal timer mellem to klokkeslæt

Jeg har i min database man kan taste ind hvornår man har været på vagt fra og til.

f.eks.
er man mødt '22:50' og har fra '00:20' - så skal den gerne skrive man har været på arbejde 2,5 time i stedet for den lige nu skriver man har været på arbejde i 2,7 time - hvilket ikke giver helt mening.

tak på forhånd
/cygnet
Avatar billede softspot Forsker
27. februar 2006 - 22:31 #1
Kan du mon bruge datediff...?

fra = "22:50"
til = "00:20"

if fra > til then
  til = formatDateTime(dateadd("d",1,now),1) & " " & til
else
  til = formatDateTime(now,1) & " " & til
end if
fra = formatDateTime(now) & " " & fra

arbejdstidminutter = datediff("n", fra, til)
arbejdetimer = int(arbejdstidminutter / 60)
arbejderminutter = arbejdstidminutter mod 60
Avatar billede Slettet bruger
27. februar 2006 - 22:32 #2
Hejsa

hvad med:

<%
AntalTime = datediff("h","27-02-2006 12:30:00","27-02-´2006 14:35:00")
%>

\Dan
Avatar billede eagleeye Praktikant
27. februar 2006 - 22:38 #3
Det eksempel du har vist skal det ikke give 1,5 time?
Avatar billede cygnet Praktikant
27. februar 2006 - 22:39 #4
softspot> giver fejl i linie 12 - der er arbejdstidminutter = datediff("n", fra, til)

http://www.1510.dk/abc/test.asp

dan > retunere bare tallet 2

http://www.1510.dk/abc/test2.asp
Avatar billede cygnet Praktikant
27. februar 2006 - 22:40 #5
eagleeye > nej der er overarbejdsbetaling - ej, selvfølgelig skulle det have gøre det, bare mig der er træt vist.
Avatar billede softspot Forsker
27. februar 2006 - 22:41 #6
Jeg kan se at jeg har lavet en fejl i den linie der sammensætter fra-datoen, den skal se således ud i stedet for:

fra = formatDateTime(now,1) & " " & fra
Avatar billede cygnet Praktikant
27. februar 2006 - 22:44 #7
soft > stadig samme fejl
Avatar billede softspot Forsker
27. februar 2006 - 22:49 #8
Sådan så:

fra = "22:50"
til = "00:20"

if fra > til then
  til = formatDateTime(dateadd("d",1,now),2) & " " & til
else
  til = formatDateTime(now,2) & " " & til
end if
fra = formatDateTime(now,2) & " " & fra

'response.Write fra & "<br>" & til & "<br>"
arbejdstidminutter = datediff("n", fra, til)
arbejdetimer = int(arbejdstidminutter / 60)
arbejdeminutter = arbejdstidminutter mod 60

response.Write "fra: " & fra & "<br>til: " & til & "<br>arbejdstid: " & right("00" & arbejdetimer,2) & ":" & right("00" & arbejdeminutter,2) & "<br>"
Avatar billede softspot Forsker
27. februar 2006 - 22:55 #9
Man kunne også bruge denne metode:

fra = "22:50"
til = "00:20"

diff = datediff("n", fra, til)
if diff < 0 then
  diff = diff + 60*24
end if

arbejdetimer = int(diff / 60)
arbejdeminutter = diff mod 60
response.Write "<br><br>arbejdstid: " & right("00" & arbejdetimer,2) & ":" & right("00" & arbejdeminutter,2) & "<br><br>"
Avatar billede cygnet Praktikant
27. februar 2006 - 23:00 #10
kan det passe det bliver noget møg at ligge disse tal sammen? altså de tider man får?

har ændret : til , men når jeg ligger arbejdstiderne sammen nu får jeg en fejl? Microsoft VBScript runtime error '800a000d'
Type mismatch: 'samlettid'

/abc/inc_timesedler.asp, line 106
Avatar billede cygnet Praktikant
27. februar 2006 - 23:16 #11
det lykkeds sgu, soft ligger du et svar?
Avatar billede cygnet Praktikant
27. februar 2006 - 23:22 #12
argh !!

Det giver kun 1:30 - skal jo skrive 1,5 time ...

http://www.1510.dk/abc/test.asp
Avatar billede softspot Forsker
27. februar 2006 - 23:34 #13
01:30 er da en halvanden time :)
Avatar billede eagleeye Praktikant
27. februar 2006 - 23:36 #14
Det er fordi cygnet gerne vil havde minutterne i 100'dele, er det ikke rigtigt?

Du ganger bare minutterne med (100/60), evt også med int omkring:

arbejdeminutter = int((arbejdstidminutter mod 60) * (100/60))
Avatar billede softspot Forsker
27. februar 2006 - 23:36 #15
Det er jo bare et spørgsmål om formatering. Du har jo antallet af minutter der er arbejdet i diff (i det sidste eksempel), så kan du jo bare dividere med det rigtige:

arbejdstid = cdbl(diff / 60)

for at få det som et kommatal.
Avatar billede cygnet Praktikant
27. februar 2006 - 23:37 #16
min løsning blev:

fra = start
til = slut

diff = datediff("n", fra, til)
if diff < 0 then
  diff = diff + 60*24
end if

arbejdetimer = int(diff / 60)
arbejdeminutter = diff mod 60
arbejdeminutter = arbejdeminutter / 60 * 10
arbejdeminutter = Replace(arbejdeminutter, ",", "")

tid = arbejdetimer & "," & arbejdeminutter

smid et svar softsport :p
Avatar billede cygnet Praktikant
27. februar 2006 - 23:38 #17
hvis du bare lige skrive til sidst hvordan det nu er man få 2 decimaler på et til - noget med format number...
Avatar billede softspot Forsker
27. februar 2006 - 23:42 #18
Må jeg foreslå denne variation (den er lidt simplere):

fra = start
til = slut

diff = datediff("n", fra, til)
if diff < 0 then
  diff = diff + 60*24
end if

tid = formatNumber(diff/60,2)
Avatar billede cygnet Praktikant
27. februar 2006 - 23:45 #19
wow - må jeg nok sige, den havde jeg ikke lige gennemskuet, og må indrømme jeg heller ikke helt forstår hvad der sker i den stump kode, men virke gør det sgu.

Har du noget dokumention for det der?
Avatar billede softspot Forsker
27. februar 2006 - 23:52 #20
Jeps :D

Find først differencen mellem de to tider

    diff = datediff("n", fra, til)

Hvis fra er større end til (f.eks. 22:50 - 00:20) er differencen negativ

    if diff < 0 then

...skal der lægges et døgn til (dvs. det antal minutter der er i et døgn)

      diff = diff + 60*24

Omregn differencen til timer og formatter der tal med 2 decimaler

    tid = formatNumber(diff/60,2)


That's it!

Tak for point iøvrigt :)
Avatar billede cygnet Praktikant
28. februar 2006 - 00:10 #21
tak for den store hjælp
Avatar billede softspot Forsker
28. februar 2006 - 00:15 #22
Velbekomme :)
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