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
-
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 ?
-
Ninox arbeitet doch mit Millisekunden - bei 32Bit wären wir da schon längst raus... :-)
-
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.
-
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 thenif day(Arbeitsbeginn) = day(Arbeitsende) then
AnzahlNachtstunden := (Arbeitsende - Arbeitsbeginn) / (3600 * 1000)
elseBedeutet,
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;
AnzahlNachtstundenLG
Peer
-
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.
-
Danke dir, BugTrapper.
Content aside
- vor 5 JahrenZuletzt aktiv
- 31Antworten
- 5576Ansichten