Groups | Search | Server Info | Login | Register
Groups > de.comp.lang.javascript > #5464
| From | Stefan Reuther <stefan.news@arcor.de> |
|---|---|
| Newsgroups | de.comp.lang.javascript |
| Subject | Re: Arbeitszeiten in JavaScript |
| Date | 2024-03-17 09:42 +0100 |
| Message-ID | <ut6du8.5a4.1@stefan.msgid.phost.de> (permalink) |
| References | <ut54un.io.1@mid.maikkoenig.de> |
Am 16.03.2024 um 22:03 schrieb Maik Koenig:
> Momentan behelfe ich mir ziemlich umständlich: Ich stelle erstmal fest,
> in welcher Schicht ich mich befinde indem ich die "Jetzt-Zeit" mit den
> jeweiligen Start- und Endzeiten der drei Schichten vergleiche. Dann
> gucke ich ob ich gerade mitten in einer Pause bin. Dann berechne ich die
> restliche Arbeitszeit bis zur nächsten Unterbrechung. Nach einem kurzen
> Check ob die Zeit reichen würde um den Job abzuschliessen ziehe ich die
> Zeit von der Gesamtarbeitszeit ab und überspringe die Pausenzeit. Dann
> wieder gucken ob die Gesamtarbeitszeit bis zur nächsten Unterbrechung
> ausreicht um den Job abzuschliessen und so weiter, bis ich dann
> irgendwann einen vermutlichen Termin für den Abschluss der Arbeiten habe.
>
> Es funktioniert, aber das sind verdammt viele Zeilen Code um am Ende
> "nur" einen Zeitpunkt zu bekommen. Zumal das Rechnen mit Stunden und
> Minuten in JavaScript eher suboptimal ist, ich habe Date() inzwischen
> wirklich hassen gelernt.
Um die Logik wie beschrieben wirst du nicht herumkommen, aber eventuell
kann man es kleverer aufschreiben.
Zuerst würde ich über die Datums-Repräsentation nachdenken. Brauchst du
wirklich ein Datum in der realen Welt oder reicht ein einfacher Wert wie
z.B. "Zeit seit <Zeitpunkt>" (Mitternacht, Montag Mitternacht,
1.1.1970), ausgedrückt in Sekunden oder Minuten? Wenn du mit Zahlen
statt Date()-Objekten rechnen kannst, wird es einfacher.
Angenommen, die Zeit wird repräsentiert als "Minuten seit Mitternacht an
<Tag>", dann wird eine Funktion zur Klassifizierung sowas wie
var TIMES = [6*60, 6*60+30, // Pause von 6:00 bis 6:30
12*60, 13*60, // Pause von 12:00 bis 13:00
18*60, 18*60+30]; // Pause von 18:00 bis 18:30
function classify(t) {
var mins = t % 24*60; // Minuten seit Mitternacht
for (var i = 0; i < TIMES.length; ++i) {
if (mins < TIMES[i]) {
return { isPause: i%2, duration: TIMES[i] - t };
}
}
return { isPause: 0, duration: 24*60-t }; // Arbeit bis Mitternacht
}
und die Berechnung sowas wie
function completionTime(t, work) {
while (work > 0) {
var k = classify(t);
if (!k.isPause) { // wenn keine Pause, verrichte Arbeit
var now = Math.min(work, k.duration);
work -= now;
t += now;
} else {
t += k.duration; // Pause, einfach nur Zeit weitersetzen
}
}
return t;
}
(Disclaimer: ungetestet runtergeschrieben)
Das halte ich jetzt für recht übersichtlich. In Date() umrechnen muss
man dann nur für die Ein-/Ausgabe.
Sommerzeit und Feiertage wären in der classify()-Funktion zu
berücksichtigen, das sollte aber relativ einfach handhabbar sein. Falls
du auf irgendwelche Magie in Date() gehofft hast, die mit Schaltsekunden
umgeht: gibt's nicht. Aber damit kann man dann eben auch z.B. den
Wochentag bekommen mit '(t / (24*60)) % 7'.
Stefan
Back to de.comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar
Arbeitszeiten in JavaScript Maik Koenig <usenetspam@maikkoenig.de> - 2024-03-16 22:03 +0100
Re: Arbeitszeiten in JavaScript "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-03-16 23:21 +0100
Re: Arbeitszeiten in JavaScript Maik Koenig <usenetspam@maikkoenig.de> - 2024-03-17 08:12 +0100
Re: Arbeitszeiten in JavaScript Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-03-17 09:36 +0100
Re: Arbeitszeiten in JavaScript Maik Koenig <usenetspam@maikkoenig.de> - 2024-03-17 18:12 +0100
[OT] Eigenentwicklung vs. Produkt (war Re: Arbeitszeiten in JavaScript) Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-03-18 06:36 +0100
Re: [OT] Eigenentwicklung vs. Produkt (war Re: Arbeitszeiten in JavaScript) Maik Koenig <usenetspam@maikkoenig.de> - 2024-03-18 07:56 +0100
Re: [OT] Eigenentwicklung vs. Produkt (war Re: Arbeitszeiten in JavaScript) Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-03-19 06:47 +0100
Re: [OT] Eigenentwicklung vs. Produkt (war Re: Arbeitszeiten in JavaScript) "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-03-18 20:37 +0100
Re: Arbeitszeiten in JavaScript Stefan Reuther <stefan.news@arcor.de> - 2024-03-17 09:42 +0100
Re: Arbeitszeiten in JavaScript Maik Koenig <usenetspam@maikkoenig.de> - 2024-03-17 15:10 +0100
Re: Arbeitszeiten in JavaScript "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-03-17 16:42 +0100
Re: Arbeitszeiten in JavaScript Maik Koenig <usenetspam@maikkoenig.de> - 2024-03-17 18:33 +0100
Re: Arbeitszeiten in JavaScript Tim Landscheidt <tim@tim-landscheidt.de> - 2024-03-18 08:36 +0000
Re: Arbeitszeiten in JavaScript Stefan Reuther <stefan.news@arcor.de> - 2024-03-18 17:58 +0100
csiph-web