[VB] Rekenen met tijd

Pagina: 1
Acties:
  • 40 views sinds 30-01-2008

  • kaandorp
  • Registratie: November 1999
  • Laatst online: 03-09 22:36
Ik heb nu dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Form_Load()
    Dim TimeStart As Date
    Dim TimeEnd As Date
    Dim TimePassed As Date
    Dim TimeRemain As Date
    Dim TimeTotal As Date
    Dim PercDone
            
    TimeStart = "08:00:00"
    TimeEnd = "16:30:00"
    TimeTotal = TimeEnd - TimeStart
    TimePassed = TimeEnd - TimeStart - Time()
    TimeRemain = TimeEnd - Time()
    PercDone = (Time() / TimeTotal) * 100%
End Sub

En daar moet een percentage uitkomen voor hoeveel de dag al verstreken is. Maar er komt iets heel vaags uit (167,4343)
Iemand een idee?

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:05
Wat doet dat %-teken achter .. * 100 ? Ik zou het eens weglaten ...

https://fgheysels.github.io/


  • kaandorp
  • Registratie: November 1999
  • Laatst online: 03-09 22:36
Sorry.. Hoort er ook niet achter.

Zonder dat % is de uitkomst 168,983660130719.

Lijkt me niet oke.

  • DigiK-oz
  • Registratie: December 2001
  • Laatst online: 09-09 19:29
Hmmmmm, je bent aan het rekenen met strings :?

Kijk eens naar de functie DATEDIFF in vb ....

Whatever


  • whoami
  • Registratie: December 2000
  • Laatst online: 14:05
Waarom deel je door timetotal ipv te delen door te eindtijd?

https://fgheysels.github.io/


  • kaandorp
  • Registratie: November 1999
  • Laatst online: 03-09 22:36
Het moet een progresbar worden die de tijd van mijn werkdag aangeeft ;)

Dus ik neem total omdat ik anders de hele dag krijg.

En de datediff... Krijg ik dan een tijd terug of niet? Want daar heb ik niks aan.
Ik moet het dus voor elkaar zien te krijgen dat

Begintijd 12:00:00
Eindtijd 13:00:00
Huidige tijd 12:30:00

Eindresultaat 50%!

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 09-09 13:08
code:
1
2
TimePassed = TimeEnd - TimeStart - Time()
           16:30 -  8:00 - 12:00  = -4:30

:? Vreemd antwoord


Het moet zijn:
code:
1
2
TimePassed = Time() - TimeStart
         12:00 -     8:00 = 4:00[/i]

Klopt beter.
code:
1
2
PercDone = (Time() / TimeTotal) * 100%
        12:00  /    8:30  (reken ik niet uit want klopt niets van.

Moet zijn:
code:
1
2
PercDone = (TimePassed / TimeTotal) * 100%
             4:00  /    8:30  * 100% =50%

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:05
((huidigetijd - eindtijd) / (eindtijd - begintijd)) * 100

https://fgheysels.github.io/


  • Aetje
  • Registratie: September 2001
  • Laatst online: 18-12-2025

Aetje

Troubleshooting met HAMERRR

Goed, ik zal 't ff vertalen, hoe de comp het leest..
TimeStart = "08:00:00"
TimeEnd = "16:30:00"
TimeTotal = TimeEnd - TimeStart
TimePassed = TimeEnd - TimeStart - Time()
TimeRemain = TimeEnd - Time()
PercDone = (Time() / TimeTotal) * 100%

TimeStart (Wordt lagere floatwaarde)
TimeEnd (Wordt hogere floatwaarde)
TimeTotal (Wordt verschil floatwaarden)

PercDone (Wordt huidige tijd (float) gedeeld door TimeTotal (float)
Hier gaat het fout. Time() is geen linear verband, op de range die jij selecteerd. Time is een floatwaarde, van 0 tot 1, die loopt van middernacht tot middernacht. Dus ga maar na wat je doet.

Forget your fears...
...and want to know more...


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Nee je moet converteren naar double.. De doubles worden dan een getal van 0 tot 1 waarbij 1 dus 24 uur is (een dag). Rekent ook wat lekkerderder.. hier is de code die wel werkt...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 Function PercentageDone() As Double
    Dim TimeStart As Date
    Dim TimeEnd As Date
    Dim TimePassed As Double
    Dim TimeTotal As Double
    Dim TimeRemain As Double
    Dim PercDone As Double
            
    TimeStart = "08:00:00"
    TimeEnd = "16:30:00"
    TimeTotal = CDbl(TimeEnd - TimeStart)
    TimeRemain = CDbl(TimeEnd - Time())
    TimePassed = TimeTotal - TimeRemain
    PercentageDone = CDbl((TimePassed / TimeTotal) * 100)
End Function

Voor het gemak kun je de timestart en timeend variabelen ook als parameter gebruiken van de PercentageDone functie.. maar dat moet jij weten...

  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Op maandag 15 april 2002 14:22 schreef sjis het volgende:
Hmmmmm, je bent aan het rekenen met strings :?

Kijk eens naar de functie DATEDIFF in vb ....
Datediff werkt niet.. dus...
Strings .. tja.. je kunt het beste een soort van typecast doen (moeilijk woord van C(++))... oftewel gewoon de variable converteren... VB doet dat ook (zie TimeStart = "08:00:00" ) .. en automagisch pakt die het goed op (net zoiets als Perl)... maar niet altijd.. daarbij moet je VB helpen zeg maar..

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-09 20:58

Janoz

Moderator Devschuur®

!litemod

Basis wiskunde.. Reken anders gewoon eens op een papiertje uit wat jij wilt, en je ziet gelijk waar het mis gaat.......

Vorige topic was ook al dicht gegaan.. Hierin staat nog simpelere wiskunde.... Je hebt mazzel dat ik net in bespreking was :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1

Dit topic is gesloten.