Autor Beitrag
Das S
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 101

Win XP
D7 Prof
BeitragVerfasst: Do 23.10.03 07:53 
Hi,

ich bin gerade dabei, eine Reisekostenabrechnung zu schreiben. Nun habe ich folgendes Problem, welches ich mit einem Beispiel beschreiben möchte:

Ich fahre für einen Kundenbesuch am 21.05.2003 um 15.00 Uhr los und komme am 24.05.2003 um 19.00 Uhr wieder zurück.

Das Programm soll mir nun ausrechnen,

1. wieviel volle Tage in diesem Zeitraum lagen (in diesem Beispiel zwei, der 22.05.2003 und der 23.05.2003)
2. wieviel von den "nicht vollen Tagen" mehr als 8 Stunden hatte aber weniger als 14 (in diesem Beispiel einer, nämlich am 21.05.2003 von 15.00 Uhr bis 24 Uhr=9 Stunden)
3.) wieviel von den "nicht vollen Tagen" mehr als 14 Stunden hatte aber weniger als 24 Stunden (in diesem Beispiel einer am 24.05.2003 von 0.00 Uhr bis 19.00 Uhr=19 Stunden)
alles andere, also weniger als 8 Stunden soll er garnicht erst beachten bzw. berechnen.

Ich zerbreche mir hier den Kopf aber ich komme da nicht daruf. Die Eingabe der Daten erfolgt in vier Textfelder.

Vielen Dank für Eure Mühen

Schöne Grüße

Das S
barfuesser
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 324



BeitragVerfasst: Do 23.10.03 09:04 
Sieh mal in der Onlinehilfe unter Datum/Zeit (Routinen) nach. Da solltest Du finden, was Du brauchst.

barfuesser
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Do 23.10.03 10:31 
Hallo Das S,

das ganze wird wesentlich leichter, wenn du dir in der Delphi Hilfe mal anguckst, wie der Datentyp tDateTime aufgebaut ist. Dann wirst du erkennen, wie du einfach mit diesen Rechnen kannst.

Für die Eingabe würde ich anstelle von 4 Edit Feldern besser auf 2 DateTimePicker zurückgreifen. Das ist für den Benutzer Angenehmer (er kann sich z.B. einen Kalender ausklappen) und für dich einfacher, da Fehleingaben vermieden werden und du direckt DateTime Werte auslesen kannst.

Gruß
Klabautermann
Das S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 101

Win XP
D7 Prof
BeitragVerfasst: Do 23.10.03 14:10 
Vielen Dank Ihr beiden. Ich weiß aber nochnichteinmal ansatzweise, wie ich es umsetzen muß. Kann mir einer vielleicht ein Codebeispiel geben.

Danke

Das S
joerg68
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 116

Win 2000
D5Enterprise
BeitragVerfasst: Do 23.10.03 14:56 
Falls du bei 4 Eingabefeldern bleibst müßte Dir das weiterhelfen

Also um Deine ganzen Tage zu erhalten müßte folgender Code Funktionieren
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
 Differenz : integer;

Differenz := Round(StrToDate(Endtermin.text) - StrToDate(Starttermin.text))-1;
if Differenz < 0 then
    Differenz := 0;

Allerdings solltest Du mit Eceptions arbeiten um falsch eingegebene Daten abzufangen.

Die Uhrzeit wird mit
StrToDateTime(StartUhrzeit) konvertiert. Wobei du hier dann Werte zwischen 0 und 1 als Rückgabe bekommst.

Die Berechnung wieviel Stunden das dann von bzw. ab Mitternacht dann sind bekommst du bestimmt auch alleine hin :wink:

Gruß
Jörg

_________________
Aus den Chaos sprach eine Stimme " Lächele und sei froh denn es könnte schlimmer kommen". Und ich lächelte und ich war froh.
UND ES KAM SCHLIMMER
Das S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 101

Win XP
D7 Prof
BeitragVerfasst: Do 23.10.03 15:07 
Also, nicht das du denkst das ich dich verarschen will :oops: , aber ich blicke die Zeit- und Datumsberechnung nicht. Wie bitte soll ich berechnen, wieviel Stunden bis Mitternacht sind usw. Uppppsss, ob Du nochmal so freundlich wärst und mir da nochmal ein Beispiel zeigst. Du hattest recht mit den Datetimepicker. Es ist einfacher und vor allen sicherer.

Vielen Dank für den Code :D

Das S
joerg68
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 116

Win 2000
D5Enterprise
BeitragVerfasst: Do 23.10.03 15:17 
Also mit StrToDateTime(Startuhrzeit.text) bekommst Du die Uhrzeit als Float zwischen 0 und 1. Für die Berechnung am Abreisetag , also für den Abreisetermin bis Mitternacht.
ausblenden Delphi-Quelltext
1:
2:
if (1-StrToDateTime(Startuhrzeit.text)  > 8/24and (1-StrToDateTime(Startuhrzeit.text)< 14/24then
   AchtBis14Stunden := true;


Ich hoffe das hilft dir weiter
Den Rest kann man durch nachdenken rausbekommen :wink:

Gruß
Jörg

_________________
Aus den Chaos sprach eine Stimme " Lächele und sei froh denn es könnte schlimmer kommen". Und ich lächelte und ich war froh.
UND ES KAM SCHLIMMER
Das S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 101

Win XP
D7 Prof
BeitragVerfasst: Do 23.10.03 15:29 
Ich danke Dir, ich glaube und hoffe, daß ich das jetz mal endlich geblickt habe. Den Rest mache ich selber :lol:

Das S