"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

S: Zeiterfassungstool in PHP/mysql

grOOvekill@ 02.09.2004 - 10:20 5908 27
Posts

othan

Layer 8 Problem
Avatar
Registered: Nov 2001
Location: Switzerland
Posts: 4210
24:00 Uhr (= 1) * 24 = 24 h
12:00 Uhr (= 0,5) * 24 = 12 h
13:45 (= 0,5729166667) * 24 = 13,75 h


13.75 Stunden = 0,5729166667 Tage

12h = 0.5d
24h = 1d

Schau's dir nochmal an. Stimmt schon ;)

grOOvekill@

Legend
Vienna Badass
Avatar
Registered: Nov 2001
Location: @home
Posts: 2297
Nein, nein! Das es stimmt, ist mir schon klar! Ich weiss nur nicht, womit und wie ich 13:45 multiplizieren/dividieren soll/muss um auf die Dezimalzahl 0,5729166667 zu kommen.

bluefoxx

Legend

Avatar
Registered: Oct 2001
Location: Vienna
Posts: 7091
achso es ging um tage... wlkikiv

grOOvekill@

Legend
Vienna Badass
Avatar
Registered: Nov 2001
Location: @home
Posts: 2297
Zitat von bluefoxx
achso es ging um tage... wlkikiv

Naja, eigentlich geht es schon um Stunden. Da steht lediglich, dass 13.75 Stunden 0,5729166667 Tage sind, da sich die Dezimalzahl bei Uhrzeiten immer zwischen 0,0 (=00:00) und 1,0 (=24:00) befindet.

edit:
Aah! Jetzt hab ich's! Die Stunden und Minuten werden separat voneinander berechnet, und zwar folgendermaßen:

1.) Stunden: 13, dividieren durch 24 = 0,54167 --> 1. Ergebnis
2.) Minuten: 45, dividieren durch 60, dividieren durch 24 (oder gleich durch 1440) = 0,03125 --> 2. Ergebnis

0,54167 + 0,03125 = 0,57292!

Stimmt doch, oder? Oder hab ich da irgendwo noch einen Hund reingebaut?
Bearbeitet von grOOvekill@ am 02.09.2004, 12:15

userohnenamen

leider kein name
Avatar
Registered: Feb 2004
Location: -
Posts: 15845
nein, sollte so stimmen :)

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
ähm, für sowas verwendet man gewöhnlich timestamps...

grOOvekill@

Legend
Vienna Badass
Avatar
Registered: Nov 2001
Location: @home
Posts: 2297
Zitat von watchout
ähm, für sowas verwendet man gewöhnlich timestamps...

Timestamps? Aha. Okay, das hab' ich leider zu spät gelesen. Wie auch immer, ich hab jetzt mal was ganz Einfaches gebastelt. So sieht's aus:

time.gif

Ist noch nicht weiß Gott wie formatiert, aber egal. Die jeweiligen Zeiten werden eingetragen, die Gesamtstundenzeit ergibt sich eben durch oben genannte Formel. Okay. Nur...

Mir ist grad aufgefallen, dass ich da irgendwie einen Denkfehler drin hab.

Nehmen wir an, ich bin von Montag bis Freitag in der Firma und trage meine Zeiten ein. Ich hätte gerne, dass jeweils nach dem letzten Arbeitstag der Woche, üblicherweise Freitag, eine Gesamtstundenzahl berechnet und darunter ausgegeben wird.

Das Problem ist nur: Wie kann ich erkennen, dass es sich um den letzten Arbeitstag handelt? Eine Variable bis 5 mizählen zu lassen klingt im ersten Moment zwar gut, aber was ist, wenn ich Freitag frei habe? Dann nimmt er mir den Montag als 5. Tag mit.

Ich bräuchte also eine Möglichkeit herauszufinden, ob der letzte Eintrag der letzte Tag einer Woche ist, damit ich darunter dann die Gesamtwochenstundenanzahl ausgeben kann.

Ich weiß, das ist alles sehr holprig programmiert und vermutlich gibt es 100 bessere Ansätze. Aber dass ich mit meinen bescheidenen PHP Kenntnissen überhaupt soweit gekommen bin, grenzt eh schon an ein Wunder. Wenn es geht, würde ich dieses Skript gerne weiterverwenden und nicht komplett von vorne beginnen. Natürlich nur, wenn es einen Weg gibt, oben genannten Problem irgendwie zu bewerkstelligen.

Irgendwer Lösungsvorschläge? tia

userohnenamen

leider kein name
Avatar
Registered: Feb 2004
Location: -
Posts: 15845
woher hast du die wochentagsangaben mit monday tuesday usw..

am einfachsten würds dann wohl gehen wenn du immer überprüfst ob es ein friday is, und wenn ja, soll er die stunden der letzten 5 tage zusammenrechnen :)

grOOvekill@

Legend
Vienna Badass
Avatar
Registered: Nov 2001
Location: @home
Posts: 2297
Zitat von userohnenamen
woher hast du die wochentagsangaben mit monday tuesday usw..

am einfachsten würds dann wohl gehen wenn du immer überprüfst ob es ein friday is, und wenn ja, soll er die stunden der letzten 5 tage zusammenrechnen :)

Naja, das ist ja das Problem! Was, wenn ich am Freitag frei habe? Dann gibt's ja keinen Eintrag am Freitag in dieser Woche, sondern erst die Woche drauf! Die Wochentage erhalte ich aus der "getdate()" Funktion.

Ich könnte natürlich den Freitag immer eintragen, obwohl ich nicht da bin und immer eine bestimmte Stundenanzahl eintragen. Hm. Geht's nicht anders? :)

userohnenamen

leider kein name
Avatar
Registered: Feb 2004
Location: -
Posts: 15845
warum sollst du etwas eintragen müssen?

is ja nicht nötig
du gehst z.b. auf den 10.9.
das script checkt ab, es is freitag und rechnet die heutigen stunden und die der letzten 4 tage mit

und wenn am 10.9. keine stunden eingetragen sind, wird halt 0 dazugerechnet

oder seh ich das falsch?
für mich wärs jetzt die am schnellsten lösbare lösung :D

grOOvekill@

Legend
Vienna Badass
Avatar
Registered: Nov 2001
Location: @home
Posts: 2297
Naja, ein Eintrag in der Datenbank existiert nur dann, wenn ich ihn vornehme. Sprich: Wenn ich am Freitag nix eingebe, existiert kein Datensatz mit dem Datum zum Freitag. Ergo dessen steht dieser Tag dann für die Ausgabe der Tabelle auch nicht zur Verfügung, sondern nur Mo, Di, Mi und Do. Ab der nächsten Woche würde ich dann wieder mit Montag beginnen. Dadurch fehlt mir der Freitag. Außer eben, ich würde den Freitag auch immer eintragen. Ansonsten habe ich keine Möglichkeit die Datensätze nach dem letzten Tag der Woche (=Freitag) zu durchsuchen.

Oder hab ich da was nicht gecheckt?

userohnenamen

leider kein name
Avatar
Registered: Feb 2004
Location: -
Posts: 15845
du musst ja auch ohne einen datenbankeintrag das derzeitige datum mit wochentag rausbekommen oder?

denn irgendwie brauchst du ja auch werte mit denen du etwas in die datenbank eintragen kannst

und mit genau der funktion schaust sozusagen nur zum schein, was für ein tag es is (eben z.b. freitag) und dann liefert er dir das aus

oder anders:

du nimmst ein startdatum, und machst dann eine eigenen wochenansicht wo alle 7 tage der woche mit den stunden dargestellt werden ;)

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
deswegen: timestamps ;)

gewöhnlich versucht man die daten in einer datenbank so "rein" wie möglich zu halten, sodass man später auch noch änderungen vornehmen kann, demnach tragst du in die datenbank nur die timestamps ein, mit denen kannst du später alles machen:
also, statt start steht dann wwi 82237127 drinnen - kein problem, denn mit den date/time-funktionen von php kannst das im 0,nix konvertieren (bei stop, pause, usw. natürlich genauso)

wenn du jetzt die differenz in stunden haben willst machst einfach (pauseend-pausestart)/60/60 fertig.

für's interface machst einfach so, dass man nen button hat "jetzt fang' ich an", "jetzt mach ich pause",... und wenn man den anclickt wird dann einfach der timestamp in die db eingatragen.

übrigens: man kann an einem tag auch mehrere pausen machen, demnach währe es klug, wenn das auch in der db. vorgesehen wäre ;)

wenn du jetzt wissen willst ob ein tag der letzte einer woche ist/war nimmst du einfach den timestamp des aktuellen und den des folgenden tages und schaust ob der numerische "dayofweek"(format-code 'w') grösser oder kleiner wird (einziges problem ist hier, dass der sonntag für die amis der anfang der woche is...)

hth
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz