Avatar billede flemming_a Nybegynder
30. januar 2007 - 13:20 Der 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
30. januar 2007 - 13:22 #1
...... og spørgsmålet er?????
Avatar billede flemming_a Nybegynder
30. januar 2007 - 13:27 #2
hov
Jo spg. hvordan får jeg regnet det ud, jeg kan ikke bruge strtotime1-strtotime2, da der jo drejer sig om mere end 24 timer.
Avatar billede stone Forsker
30. januar 2007 - 21:25 #3
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;
Avatar billede flemming_a Nybegynder
31. januar 2007 - 13:46 #4
stone -> jeg må ikke bruge muligheden DB, men jeg vil alligevel lige prøve dit forslag.......
sorry for det langsomme svar
Avatar billede flemming_a Nybegynder
31. januar 2007 - 13:48 #5
jeg får fejl fra datetime når jeg skriver 30:00:00 (30 timer)
Avatar billede stone Forsker
31. januar 2007 - 18:08 #6
Har du sat din editmask op for feltet i din dbfelt? til et tidsformat

formatet du skal bruge er "long time" hvis du vil have sekunder med....

!90:00:00>LL;1;_
Avatar billede flemming_a Nybegynder
09. februar 2007 - 12:31 #7
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........
Avatar billede stone Forsker
09. februar 2007 - 14:11 #8
Hvordan gemmer du dine indtastninger?
Avatar billede flemming_a Nybegynder
09. februar 2007 - 14:26 #9
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....
Avatar billede kroning Nybegynder
09. februar 2007 - 15:49 #10
Hvorfor gemmer du ikke bare det samlede antal timer i en anden variable end som TDateTime?
Avatar billede stone Forsker
09. februar 2007 - 19:28 #11
datetime er baseret på at kunne håndtere 24 timer og ikke mere, og som kroning pointere så glem datetime, og prøve en anden løsning.
Avatar billede kroning Nybegynder
10. februar 2007 - 00:22 #12
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

  Ialt:=(Til1-Fra1) + (Til2-Fra2) + (Til3-Fra3);
  // 28:48 - Ialt 28 timer og 48 minutter
    Showmessage(IntToStr(HoursBetween(0,Ialt))+':'+IntToSTr(MinuteOfTheHour(Ialt)));
end;
Avatar billede flemming_a Nybegynder
12. februar 2007 - 09:29 #13
kroning -> det vil jeg prøve

/Flemming
Avatar billede flemming_a Nybegynder
13. februar 2007 - 12:16 #14
det virker næsten, desværre er der åbenbart ikke forske på 31 timer og 30 timer
Avatar billede flemming_a Nybegynder
13. februar 2007 - 12:24 #15
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
Avatar billede kroning Nybegynder
13. februar 2007 - 12:24 #16
Hvad mener du?
Avatar billede kroning Nybegynder
13. februar 2007 - 12:26 #17
Hvorfor putter du ugentligarbejdstid ind i HoursBetween proceduren?
Avatar billede kroning Nybegynder
13. februar 2007 - 12:46 #18
Det er nok fordi du bruger ugentligarbejdstid = 1.2501 og lign. det er ikke præcis nok, prøv dette:


    tid:=(1/24)*31; // 31 timer
  ugentligarbejdstid:=1.25; // 30 timer


// 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)
Avatar billede flemming_a Nybegynder
13. februar 2007 - 13:06 #19
kroning ->der er noget ventetid på de mails der kommer fra eksperten, men jeg prøver dit sidste forslag, kan du ikke også smide et svar.
Avatar billede flemming_a Nybegynder
13. februar 2007 - 13:15 #20
du havde ret det var ikke præsist nok, nu virker det som det skal..........
Avatar billede kroning Nybegynder
13. februar 2007 - 13:16 #21
jo, hvis du mener at have fået noget brugbart.
Avatar billede flemming_a Nybegynder
13. februar 2007 - 20:18 #22
jamen det mener jeg bestemt, det var lige det jeg gerne ville have
Avatar billede flemming_a Nybegynder
13. februar 2007 - 20:18 #23
1000 tak
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