0

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

null
    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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.

    • Siegfried_H
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Wie muss den der Code lauten, wenn ich zwischen den Zeiten noch eine Pause einbauen möchte?

    • Siegfried_H
    • vor 4 Jahren
    • Gemeldet - anzeigen
    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Einfach auch noch die Pausenzeit abziehen:

     

    round((number(Ende) - number(Start) - number(Pause)) / 3600000, 2)

    • Siegfried_H
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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)
    end

    und bekomme den Wert:

     

    angeteigt.

    • Siegfried_H
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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)
    end

     

    dann funktioniert es.

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ja, genau so hatte ich es in meiner ersten Antwort empfohlen. Schön zu wissen, dass es richtig war.

    • Tomi
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Siegfried und Copytexter ich bedanke mich für die super Hilfe. Funktioniert super.