0

Verbleibende Zeit bis Mitternacht berechnen

Hallo.

Ich möchte aus Beginn (Zeit (Arbeitsbeginn)) und Ende (Zeit (Arbeitsende)) einer Arbeitszeit die Nachtzeit errechnen. Die Nachtzeit beginnt 20 Uhr und endet 6:00. Meine Überlegung ist, das man vorher erstmal abfragt, ob die Zeit nach 20 Uhr oder/und 6 Uhr liegt.

let intNachtBeginn := 'Zeit (Arbeitsbeginn)' > 6 or < 20;

let intNachtEnde := 'Zeit (Arbeitsende)' > 6 or < 20;

Jetzt sollte die Zeit bis 24 Uhr hoch/zurückgerechnet werden und in jeweils einer Variable gespeichert werden und zusammengezählt werden.

Hier scheitert mein mageres Wissen an der Umsetzung.

Wie stelle ich das an, dass bei zB 21:05 Beginn noch 3:55 bis 0:00 und bei Ende 4:35, 4:35 ab 0:00 zusammen 8:30 ergeben?

LG

Peer

31 Antworten

null
    • BugTrapper
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Das Jahr-2038-Problem finde ich aber sehr interessant:

    https://de.m.wikipedia.org/wiki/Jahr-2038-Problem

    gibt’s dann ein 64-Bit-Ninox ?

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ninox arbeitet doch mit Millisekunden - bei 32Bit wären wir da schon längst raus... :-)

    • BugTrapper
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Haste auch wieder recht, habe ich nicht gelesen, steht im Ninox-Handbuch, Tabelle 3 - Formatcodes, "x", berechnet die Unix-Zeit in Millisekunden bis heute.

    OK, dann wird wohl in 64 Bit gerechnet und man muss sich die nächsten Milliarden Jahre keine Sorgen machen.

    • Peer
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo BugTrapper.

    Ich muss das Thema nochmal aufgreifen. Ich bin deinen Code nochmal durchgegangen und habe ihn mit Beispielen gefüttert. Dabei sind mir Rechenfehler aufgefallen.

    let AnzahlNachtstunden := 0;
    if Arbeitsende - Arbeitsbeginn > 0 then
    if day(Arbeitsbeginn) = day(Arbeitsende) then
    AnzahlNachtstunden := (Arbeitsende - Arbeitsbeginn) / (3600 * 1000)
    else

    Bedeutet, wenn Arbeitsbeginn und Arbeitsende gleich sind, werden beide subtraktiert. Aber wenn sie außerhalb der Nachtzeit sind, werden sie ebenfalls in den AnzahlNachtstunden einbezogen. Das sollte aber logischerweise nicht sein.


    let bisMitternacht := appointment(Arbeitsbeginn, date(year(Arbeitsbeginn), month(Arbeitsbeginn), day(Arbeitsbeginn) + 1) + time(0, 0, 0));
    if duration(bisMitternacht) >= 4 then
    AnzahlNachtstunden := number(duration(bisMitternacht) / (3600 * 1000))
    end;
    let abMitternacht := appointment(date(year(Arbeitsbeginn), month(Arbeitsbeginn), day(Arbeitsbeginn) + 1) + time(0, 0, 0), Arbeitsende);
    if duration(abMitternacht) > 0 then
    AnzahlNachtstunden := AnzahlNachtstunden + min(6, number(duration(abMitternacht) / (3600 * 1000)))
    end
    end
    end;
    AnzahlNachtstunden

    LG

    Peer

    • BugTrapper
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hab die Datenbank "271_Nachtstunden" ins Webinar-Team hochgeladen.

    Von wann bis wann die Nachtstunden gehen könnte man noch variabel machen.

    Die berechneten Nachtstunden sind mit denen im Beispiel von Copytexter identisch.

    Am Computer geht das Programmieren sehr viel besser als mit der Handy-App.

    Ich musste noch hart eingreifen und mein Skript überarbeiten, damit auch alles funktioniert.

    Sollten noch Fehler gefunden sind, so bitte ich diese zu berichtigen.

    • Peer
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Danke dir, BugTrapper.

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 31Antworten
  • 5515Ansichten