Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Zeiten/Zeitraum...

Empfohlene Antworten

Veröffentlicht

Hallo,

ich sitze hier gerade vor einem Problem, dem ich irgendwie nicht so ganz Herr werde:

Ich brauche eine Funktion die mir die Anzahl an freien Stunden eines Arbeitstages zurück gibt. Klingt sofern ja eigentlich ziemlich einfach, es spielen allerdings einige Faktoren eine Rolle

Arbeitszeit: z.B. von 8:00 - 17:00 Uhr

Pause1: z.B. von 10:00 - 10:15 Uhr

Pause2: z.B. von 12:00 - 13:00 Uhr

Soweit so klar, ich habe 9h Arbeitszeit und ziehe die Pausen ab.

Was ist nun aber, wenn er einen Arzttermin hat, und zwar von 8:00-11:00 Uhr. Dann dürfte ich die erste Pause ja nicht abziehen.

Schön ist es auch bei Feiertagen, die mitten am Tag beginnen: z.B. Heiligabend oder wenn er seit 2 Wochen im Urlaub ist und heute Mittag wieder kommt.

Irgendwie fehlt mir heute der rote Faden.

Na mal ganz einfach nachgefragt. Werden die Anfangs- und Endzeit manuell eingegeben oder automatisiert?

Über bedingte Verarbeitung läßt sich das doch ziemlich schnell lösen würde ich sagen.

  • Autor

Die Arbeitszeiten liegen in einer Datenbank. Wenn für einen Mitarbeiter keine Arbeitszeiten angegeben sind, nimmt er die Öffnungszeiten aus einer Ini-Datei.

Die Zeiten für Feiertage werden berechnet und auch in eine DB geschrieben. Urlaub, Krankheit, Berufsschule, also freie Zeiten, können natürlich kurzfristig eingeplant werden und liegen natürlich auch in einer DB. Dann gibts da natürlich noch andere Termine, die (wer mags glauben) auch kurzfristig in eine DB eingetragen werden können.

Ich muss mir wohl ne Kanne Kaffee machen und dann über DateDiff was basteln :(

Gut, erfinden wir das Ran von vorne.

Machen wir uns ein bool'sches Array(boolArbeitszeit) der Größe 540 (9*60 Minuten) und initialisieren wir es mit true. Als nächstes basteln wir uns eine Funktion die das Array und die Pausenzeit übergeben bekommt. In dieser Funktion setzen wir diejenigen Minuten die in der Pausenzeit liegen auf false. Ausgegeben würden dann nur die Blöcke die true enthalten (und dadurch dass die Anzahl der true-Elemente im Array zählbar ist können wir auch die Anzahl der Arbeitsminuten/-stunden bestimmen).

@LoneGunman

Da müssen Pausen aber immer 60 Minuten lang sein.

@developer

Stehen die Pausenzeiten auch in der DB oder woanders? Oder werden manuell eingegeben?

  • Autor

@LoneGunman

Wir haben allerdings nicht nur einen Mitarbeiter, sonder... sagen wir mal 30 Stück, 5 Mietwagen und 3 Gruppen. Meiner ANsicht nach zu unperformant.

Ich habe mir was ausgedacht...

Es gibt 3 verschiedene Möglichkeiten, wie 2 Termine zueinander angeordnet werden können:

a) Sie überschneiden sich nicht

B) Sie überschneiden sich in einem Punkt

c) Sie überschneiden sich in zwei Punkten


a)

[OOOOOOOO]

                         [OOOOOOOOOO]



[OOOOOOOOOOOO]

        [OOOOOOOOOOOO]


c)

[OOOOOOOOOOOOOOOOOOOOOO]

         [OOOOOOOO]


[/code]

Ich sortiere ein Zweistelliges Array [n,1] nach dem Ende der Termine und fange mit dem spätesten Termin an.

Bei a würde sich die Pausenzeit einfach berechnen lassen:

T=Termin ; A=Anfang ; E=Ende

T2E-T2A + T1E-T1A

Bei b wäre das

T2E-T1E + T1E-T1A

oder

T2E-T2A - T1E-T2A + T1E-T1A

Bei c wäre das

T1E-T1A

bei Punkt b wäre die Berechnung ähnlich einfach wie bei Punkt c

T2E-T1A

oder?

Gruß

Dimikar

  • Autor

Eigentlich schon, da hast du Recht. Es könnte allerdings zu Problemen kommen, wenn mehr als 2 Termine auftreten. Daher muss ich das mit c auch nochmal durchdenken...


[ooooooooooooooooooooooooooo]

         [oooooooooooooooooooooooooooo]

                      [oooooooooooooooooooooooooooo]

                          [ooooooo]

So könnte das ja auch aussehen...

Nun kan ich als VB-Anfänger nicht wirklich produktiv mitmischen, jedoch stellt sich mir die Frage, wer solche Termine vergibt? Theoretisch ist deine zuletzt genannte Konstellation mehrerer Termine möglich, praktisch hingegen wird wohl niemand Termine auf solch eine Art und Weise vergeben. Fall a) bis c) erscheinen da schon weitaus realistischer.

Und im Endeffekt bist du bzw. jeder Mensch nur in einem Termin vertreten. Man kann nicht in einer Besprechung sein und zeitgleich zum kunden fahren (auch wenn man es manchmal können müsste ;) )

  • Autor

Auf einer Seite ist das natürlich begründet. Es geht allerdings hier nicht nur um "Termine" sondern auch um freie Zeiten wie z.B. Urlaub, ÜBerstunden die abgefeiert werden oder PAusen. Es ging mir ja darum, wie viel Arbeitszeit für den Mitarbeiter noch verplant werden kann.

Es wäre schon realistisch, wenn du an einem Tag zum Zahnarzt gehst (z.B. 9-14 Uhr), du wärend dieser Zeit eine Frühstückspause hättest (z.B. 10:00 - 10:15), von 12:00 bis 12:45 Uhr ist Mittagspause und du hattest ab 13 Uhr Urlaub eingetragen (weil du damals noch nicht wusstest, dass du zum Arzt musst). Da sollten dann also 0 Arbeitsstunden bei rauskommen und keine negative Arbeitszeiten. Das würde ja passieren, wenn du alle Pausen addieren und sie von der Abeitszeit abziehen würdest.

Aber im Endeffekt ist deine letzte Beschreibung auch eine Überlagerung von zwei Terminebenen: unten die normalen Termine, die vom Zahnarzt überlagert werden...


 [oooooooooooooooooooooooo-ZAHNARZT-oooooooooooooooooooooooo]

 [oo-ARBEIT-oo][oo-PAUSE-oo][oo-ARBEIT-oo][ooo-URLAUB-ooooooooooooooo]

Selbst wenn zwischen der untersten und der obersten "Ebene" sich noch eine befindet, meinetwegen von 10:00 - 12:30 Uhr, dann hat das ja keine Auswirkungen auf dein Vorhaben. Denn Zahnarzt hat eine höhere Priorität (meistens). Verstehst du? Is' aber auch doof zu erklären...

Nachtrag:

Selbstverständlich musst du deinem kleinem Programm dann auch die Prioritäten für die entsprechenden Termine zuweisen. Schließlich willst du ja, wie du schon meintest, für Arztbesuche oder Urlaub keine Arbeitszeit abgezogen bekommen.

  • Autor

Nochmal kurz: Es geht mir ja nicht um irgendwelche Prioritäten. Es ist auch egal, ob der Termin erst um 9 oder 9:30 Uhr ist. Es können n Ebenen existieren. Letztendlich will ich "nur" wissen, wie lange die Person am gleichen Tag noch arbeiten kann. Ob das von seinem Stundenkonto abgezogen wird oder nicht, ist total irelevant.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.