Brainstorming Arbeitszeit Erfassung per PHP


forum-user

Mitglied
Hallo Leute, an dieser Stelle möchte ich mit Euch einfach über die genannte Thematik plaudern.
Der eigentliche Grund ist schnell erklärt. Wir haben ein simples Zeiterfassungssystem via PHP & MySQL erstellt, was auch ganz gut funktioniert, doch es gibt auf Grund der unterschiedlichen Dienste, den einen oder anderen kniffligen Punkt.
Die Funktionsweise ist recht einfach:
  • Login à User ID wird in Session gespeichert à Weiterleitung in den Mitarbeiter Bereich (MAB)
  • Informationen zum Mitarbeiter (MA) werden aus der Datenbank (DB) gelesen, Name, Dienst Zeiten etc.
  • MA hat nun die Möglichkeit zu „Kommen“ bzw. zu „Gehen“
  • Zeitstempel (hier ist es TimeStamp), wird in die jeweiligen Felder der DB gespeichert und Arbeitszeit wird berechnet
  • MABà MAà Logout à Session zerstört

Die „Arbeitszeit Tabelle“ ist ungefähr so aufgebaut:
Zeit_ID -> auto inc / prim Key | Mitarbeiter_ID | Beginn | Ende | Dauer | ArbeitVonZeit | ArbeitBisZeit

Die „Mitarbeiter Tabelle“ ungefähr so:
Mitarbeiter_ID -> auto inc / prim key | Benutzername | Name | Vorname | Vertragsstunden

Das Ganze funktioniert, solange ein MA zum Beispiel 8:00 beginnt und 16:00 geht, da es alles in der „Arbeitszeit Tabelle“ unter der Zeit_ID in einer spalte eingetragen wird.
Nun gibt es aber bei uns MA, welche Tagübergreifend arbeiten, zum Beispiel 22:00 Beginn und 8:00 Ende und genau hier mussten wir mit einem unglücklichen Kunstgriff arbeiten.
Wenn so ein MA „Geht“ prüft das Script die aktuelle Zeit, kontrolliert ob es weit vor der heutigen „Beginn“ Zeit liegt, stellt fest das dies TRUE ist und geht einen Tag zurück und speichert die Zeit.
Dazu sei noch gesagt, es gibt Dienste, welche ab Dienstag bis Samstag und welche die ab Montag bis Freitag durchgeführt werden.
Damit komme ich zum eigentlichen Anliegen. Habt Ihr Anregungen oder Ideen, wie man dies anderweitig ohne solche Kunstgriffe lösen könnte.
 

ComFreek

Mod | @comfreek
Moderator
Wenn so ein MA „Geht“ prüft das Script die aktuelle Zeit, kontrolliert ob es weit vor der heutigen „Beginn“ Zeit liegt, stellt fest das dies TRUE ist und geht einen Tag zurück und speichert die Zeit.
Ich habe mich gerade vergewissert, dass TIMESTAMP in MySQL tatsächlich Datum *und* Zeit speichert. Ergo sehe ich nicht ganz, warum ihr diesen Kunstgriff benötigt.
Könntest du das vielleicht näher erläutern? :)

Fragt ihr die Beginnzeit beim Kommen oder Gehen ab? Falls beim Kommen, wo speichert ihr das dann? In derselben Arbeitszeit-Tabelle mit NULL in "ArbeitBisZeit"?
 

forum-user

Mitglied
Ich habe mich gerade vergewissert, dass TIMESTAMP in MySQL tatsächlich Datum *und* Zeit speichert. Ergo sehe ich nicht ganz, warum ihr diesen Kunstgriff benötigt.
Könntest du das vielleicht näher erläutern? :)

Fragt ihr die Beginnzeit beim Kommen oder Gehen ab? Falls beim Kommen, wo speichert ihr das dann? In derselben Arbeitszeit-Tabelle mit NULL in "ArbeitBisZeit"?
Hallo ComFreek, anbei ist eine Darstellung der "Arbeitszeit" Tabelle
Beispiel.JPG
Wie Du siehst, meldete sich der MA am 18.07. an, macht seinen Dienst und meldet sich am 19.07. ab.

Um auf Deine Frage einzugehen, wenn der MA "kommt", wird der aktuelle TimeStamp in "anmelden" gespeichert, somit belibt das Feld "abmeldung" auf NULL stehen.
Nun beendet dieser MA seinen Dienst, so muss in diesem Fall, die "Gehen" Zeit in die Zeile vom 18.07. eingetragen werden, damit dieser Datensatz korrekt abgeschlossen ist.
 

ComFreek

Mod | @comfreek
Moderator
Ich verstehe nicht, warum ihr Beginn und Ende noch speichern müsst, wenn ihr sowieso die TIMESTAMPs anmeldung und abmeldung habt.
 

ComFreek

Mod | @comfreek
Moderator
Ah, und das ist der Grund, warum ihr Folgendes machen müsst?

Wenn so ein MA „Geht“ prüft das Script die aktuelle Zeit, kontrolliert ob es weit vor der heutigen „Beginn“ Zeit liegt, stellt fest das dies TRUE ist und geht einen Tag zurück und speichert die Zeit.
Hm, vielleicht sehe ich auch den Wald vor lauter Bäumen nicht. Wenn ein MA geht, würde ich das einfach in "abmeldung" speichern. Jetzt wollt ihr wahrscheinlich noch speichern, wie lange er also gearbeitet und wie das in Relation zur vom Tool vorgegebenen Arbeitszeit steht. Die Arbeitszeit lässt sich einfach als Differenz beider Timestamps ausrechnen. Wie viele Stunden Arbeitszeit das Tool jedoch vorgegeben hat, ist kniffliger. Da brauchst du eben doch den Kunstgriff.
Und die Frage ist jetzt, wie du diesen vermeiden kannst, oder?
 

forum-user

Mitglied
Die Arbeitszeit lässt sich einfach als Differenz beider Timestamps ausrechnen. Wie viele Stunden Arbeitszeit das Tool jedoch vorgegeben hat, ist kniffliger. Da brauchst du eben doch den Kunstgriff.
Und die Frage ist jetzt, wie du diesen vermeiden kannst, oder?
Du hast den Finger drauf, die Zeitspanne, also tatsächlich geleistete Zeit, wird als Differenz zwischen „Kommen“ und „Gehen“ berechnet.
Der Kunstgriff ist eben nur bei Tag übergreifende Dienste, wo eben ein. Tag zurück gerechnet werden muss. Und genau hier würde ich einfach Gedanken hören, wie man dies evtl. besser anstellen könnte.