Problem bei der Zeitberechnung
Ich möchte die Gesamtzeit berechnen (Ende - Start) = Gesamtzeit.
Ich habe ein Problem mit der Formel: number(Ende - Start) / 3600000
Ergebnis ein minus wert. Beispiel: (00:15 - 22:45 = -22,5)
Ab 0 Uhr funktioniert die Formel nicht. Bitte um Hilfe.
8 Antworten
-
Hallo "Firma", bei Feldern vom Typ Uhrzeit funktioniert das einfache Subtrahieren nur innerhalb eines Tages. Geht der Ende-Wert über 0 Uhr hinaus, muss man zur Berechnung das Datum hinzuziehen. Entweder mit Feldern vom Typ "Datum + Uhrzeit" oder über eine Formel, die prüft, ob der Ende-Wert kleiner ist als der Start-Wert und ggf. das Datum um einen Tag erhöht. Zum Beispiel so (vorausgesetzt, dass es im Datensatz ein Feld vom Typ "Datum" gibt):
if Start <= Ende then
round((number(Ende) - number(Start)) / 3600000, 2)
else
let myStart := datetime(Datum, Start);
let myEnde := datetime(Datum + 1, Ende);
round((number(myEnde) - number(myStart)) / 3600000, 2)
end
Das funktioniert allerdings auch nur bis zu einer maximalen Dauer von 24 Stunden. Wenn es darüber hinaus geht, sollte man statt der Uhrzeit-Felder wie gesagt lieber gleich Felder vom Typ "Datum + Uhrzeit" nehmen. Oder ein Terminfeld mit Von/Bis-Daten.
-
Wie muss den der Code lauten, wenn ich zwischen den Zeiten noch eine Pause einbauen möchte?
-
-
Einfach auch noch die Pausenzeit abziehen:
round((number(Ende) - number(Start) - number(Pause)) / 3600000, 2)
-
Erst mal danke für die schnelle Antwort. Aber leider bekomme ich bei dem Code einen falschen Wert in der Berechnung angezeigt. Ich habe den Code so eingetragen.
if Start <= Ende then
round((number(Ende) - number(Start) - number(Pause)) / 3600000, 2)
else
let myStart := datetime('Datum Start', Start);
let myEnde := datetime('Datum Start' + 1, Ende);
round((number(Ende) - number(Start) - number(Pause)) / 3600000, 2)
endund bekomme den
Wert:angeteigt.
-
Ich habe den Fehler gefunden. Es muss heißen:
if Start <= Ende then
round((number(Ende) - number(Start) - number(Pause)) / 3600000, 2)
else
let myStart := datetime('Datum Start', Start);
let myEnde := datetime('Datum Start' + 1, Ende);
round((number(myEnde) - number(myStart) - number(Pause)) / 3600000, 2)
enddann funktioniert es.
-
Ja, genau so hatte ich es in meiner ersten Antwort empfohlen. Schön zu wissen, dass es richtig war.
-
Hallo Siegfried und Copytexter ich bedanke mich für die super Hilfe. Funktioniert super.
Content aside
- vor 4 JahrenZuletzt aktiv
- 8Antworten
- 1006Ansichten