30. januar 2007 - 13:20Der er
22 kommentarer og 1 løsning
beregning af arbejdstid
jeg vil lave et lille program hvor man hver dag indtaster mødetid og sluttid, når ugen så er omme kan man regne ud hvor mange timer man har haft i forhold til hvor mange man skulle have. eks man har haft 34 timer og 30 minutter, man skulle have 30 timer altså har man + 4timer og 30 minutter
du kunne lave en lille db app. og brug Tdbedit og sæt editmask
du kunne sætte et starttidspunkt og et sluttidspunkt og beregne antal timer det samlede antal kunne så vises i status bare or what ever....
var Total: Real; begin Table1.Open; begin Table1.DisableControls; Total := 0; try Table1.First; while not Table1.EOF do begin Total := Total + timeantal.Field.AsDateTime; Table1.Next; end; finally Table1.EnableControls; end; begin Table1.DisableControls; Total := 0; try Table1.First; while not Table1.EOF do begin Total := Total + timertotal.Field.AsDateTime; Table1.Next; end; finally Table1.EnableControls; end; Statusbar1.Panels[0].Text:='Timer ialt: ' + Format('%g', [Total]); end; end; end;
den totale kan du så modregne i konst. som er 30 timer
lidt frit fra leveren har....sidder ikke lige pt med delphi
beregning...
procedure TForm1.Table1CalcFields(DataSet: TDataSet); begin if table1starttid.AsdateTime < table1sluttid.AsDateTime then table1timeantal.AsDateTime := table1starttid.AsdateTime - table1sluttid.AsdateTime; end;
ja, men det giver samme resultat, fejl fra datetime (30:00:00 er ikke gyldigt) Og undskyld jeg ikke har svaret, noget må være gået galt, jeg har skrevet men det er åbenbart ikke kommet frem........
de bliver gemt i en *.txt fil, og når beregningen skal udføres hentes de frem i en datatime variabel, problemet opstår når det samlede antal timer overstiger 24....
Jeg mente ikke at han skulle glemme datetime. TDateTime er blot en variable af typen double og er ikke begrænset til at kunne håndtere 24 timer. Kun diverse datetime funktioner som f.eks. StrToDate er begrænset på den måde at de kræver en gyldig dato/tid streng.
Hvis du har dine tider i en txt fil burde det være simpel udregning, bruger du en nyere delphi som har DateUtils uniten så er det meget enkelt.
F.eks., husk DateUtils i din uses:
var Fra1,Til1,Fra2,Til2,Fra3,Til3,Ialt : TDateTime; begin Fra1:=now; Til1:=now+0.5; // 12 timer Fra2:=now; Til2:=now+0.3; // 7 timer og 12 minutter Fra3:=now; Til3:=now+0.4; // 9 timer og 36 minutter
hvis følgende køres Showmessage('+'+IntToStr(HoursBetween(ugentligarbejdstid,tid))+':'+IntToSTr(MinuteOfTheHour(tid))) og ugentligarbejdstid = 1.2501 og tid = 1.2916666667 (1time+10 timer+10 timer+10 timer) er resultatet =+0:0
// skriver tid dvs. 31 timer Showmessage('+'+IntToStr(HoursBetween(0,tid))+':'+IntToSTr(MinuteOfTheHour(tid)));
// skriver forskellem mellem tid og ugentligtid dvs. her +1:00 // bemærk du selv skal tage højde for om det er + eller - total:=ugentligarbejdstid-Tid; Showmessage('+'+IntToStr(HoursBetween(0,total))+':'+IntToSTr(MinuteOfTheHour(tid)))
Men hvis det altid drejer sig om hele timer og minutter så var det måske en bedre løsning at regne det om til heltal (integer)
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.