2016-07-14 5 views
0

Ich benutze FastReport mit Delphi. Ich habe folgende Felder:FastReport berechnen Stunden von Date_From und Date_To Felder

DATE_FROM (example: 01.05.2015.) 
TIME_FROM (example: 13:00) 

DATE_TO (example: 02.05.2015.) 
TIME_TO (example: 10:00) 

Ich muss berechnen, wie viele Tage und Stunden zwischen diesen Paaren von Daten vergangen sind. In diesem Beispiel ist es weniger als 24 Stunden ... also sollte das Ergebnis lauten:

0 days 21 hours 

Wie erreicht man das?

+3

Ich weiß nicht, ob FastReports die Summe ausführen wird, aber Sie könnten in Erwägung ziehen, ein berechnetes Feld in Ihrer Datenmengenkomponente zu verwenden und dort die Summe zu berechnen. Welchen Typ haben die von Ihnen verwendeten Felder für Datum und Uhrzeit? –

+0

Sie haben Recht. In der Zwischenzeit habe ich die Besetzung in Datensatz sql CAST (DATE_FROM als Datetime) + CAST (TIME_FROM als Zeit) AS DATE_TIME_FROM Kann ich den Unterschied in SQL aus solchen generierten Feldern berechnen? Wie: DATE_TIME_TO - DATE_TIME_FROM? – Volkan

+0

mit zwei Güssen in Sql Ich habe diese Ergebnisse: 2016-01-13 09: 15: 00.000 \t 2016-01-13 14: 30: 00.000 – Volkan

Antwort

-1

Ich würde TurboPower Orpheus installieren. Fügen Sie die OvcDate-Unit in Ihre uses-Anweisung ein. Dieses Beispiel wurde mit Berlin 10.1 Architect erstellt und ist einigermaßen abwärtskompatibel. Es gibt viele Versionen von Orpheus.

procedure TForm2.SpeedButton1Click(Sender: TObject); 
var 
    date1 : TDateTime; 
    date2 : TDateTime; 
    rdt1 : TStDateTimeRec; 
    rdt2 : TStDateTimeRec; 
    days : Integer; 
    seconds : Integer; 
    hrs : Integer; 
    min : Integer; 
    sec : Integer; 
begin 
    date1 := StrToDateTime('01/05/2015 13:00'); 
    date2 := StrToDateTime('02/05/2015 10:00'); 
    rdt1.D := DateTimeToStDate(date1); 
    rdt2.D := DateTimeToStDate(date2); 
    rdt1.T := DateTimeToStTime(date1); 
    rdt2.T := DateTimeToStTime(date2); 
    DateTimeDiff(rdt1, rdt2, days, seconds); 
    hrs := seconds div SecondsInHour; 
    min := ((seconds - (hrs * SecondsInHour)) div SecondsInMinute); 
    sec := (seconds - (hrs * SecondsInHour) + (min * SecondsInMinute)); 
    sec := sec; 
    // days = 30 
    // seconds = 75600 
    // hrs = 21 
    // min = 0 
    // sec = 0 
end; 

Das obige Beispiel erstellt einen Proof of Concept und zeigt, wie die Berechnung funktioniert. Ihre Eingabe war 1.5.2015 und 2.5.2015 für die jeweiligen Termine und das habe ich genutzt.

Ich würde die entsprechenden Formelfelder einrichten und diese Formel in das OnCalc-Ereignis einfügen. Achten Sie darauf, einen Mechanismus einzurichten, um die Datetime-Felder start und stop zu setzen. Lassen Sie das DBMS den Rest erledigen. Ich bin zufällig einer der beliebtesten Delphi-Autoren. http://cc.embarcadero.com/PopularAuthors.aspx

+0

Sie müssen Orpheus nicht installieren, um Datumsberechnungen in Delphi durchzuführen. Es kommt mit der DateUtils-Einheit, die einige Funktionen für die Arbeit mit TDateTime-Werten von Delphi bietet, einschließlich DaySpan, HourSpan, DaysBetween und HoursBetween, die seit einem Jahrzehnt oder mehr verfügbar sind. Und was zum Teufel haben Ihre beliebtesten Delphi-Autoren hier mit etwas zu tun? Es hat weder Relevanz für die gestellte Frage noch für Ihre Antwort. es ist nur Selbstverherrlichung, die hier nicht angebracht ist. Es ist auch nicht beeindruckend, wenn Sie keine integrierten Funktionen kennen, die diese Aufgabe übernehmen. –

Verwandte Themen