BlackBoard » Design, Programmierung & Entwicklung » Programmieren » PHP Zeiterfassung » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Zeiterfassung
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Flux
Junior Member


images/avatars/avatar-2252.gif

Dabei seit: 24.08.2006
Beiträge: 169

Zeiterfassung       Zum Anfang der Seite springen

Moin,

Durch klick auf eine Uhr soll die Start- und durch erneutes klicken die Endzeit einer Arbeitsphase in die DB geschrieben werden. Soweit kein Problem.

Doch welches Format nehme ich am besten und wie rechne ich es aus, wieviele Stunden zwischen Start und Ende liegen?

mfg
12.03.2008 17:30 Flux ist offline E-Mail an Flux senden Homepage von Flux Beiträge von Flux suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Das lässt sich doch alles per SQL machen.

Als Datentyp für die Tabelle würde ich DATE oder DATETIME vorschlagen Augenzwinkern

Und dann jeweils ein Insert bzw. Update für Start und Ende.

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
12.03.2008 17:38 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
phoenix
Moderator


Dabei seit: 22.08.2003
Beiträge: 1.157

      Zum Anfang der Seite springen

Falls es sich um eine MySQL Datenbank handelt schau dir zum berechnen der Zeit zwischen den zwei Uhrzeiten, die SQL Funktion SUBTIME mal genauer an. Hier ist noch ein Text der dir vielleicht beim Datentyp weiterhilft.
12.03.2008 17:57 phoenix ist offline Beiträge von phoenix suchen
Flux
Junior Member


images/avatars/avatar-2252.gif

Dabei seit: 24.08.2006
Beiträge: 169

Themenstarter Thema begonnen von Flux
      Zum Anfang der Seite springen

hi,

ok super danke, ich habe jetzt

select SUBTIME($startzeit,$endzeit);

normalerweise geb ich die php werte durch mysql_result(); aus. wie bekomm ich das ergebniss der subtime hierbei in eine variable?

habe es folgendermassen probiert, was allerdings nicht funktioniert:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
include 'dbconnect.php';

$sqls     =    "select * from zeiterfassung";
$res    =    mysql_db_query($db$sqls$ident);

$start mysql_result($res,0,"start");
$ende mysql_result($res,0,"ende");


$sqls     =    "select SUBTIME('$start','$ende') as total";
$res    =    mysql_db_query($db$sqls$ident);

echo mysql_result($res,0,"total");



EDIT: wie ich gemerkt habe funktioniert:
SELECT SUBTIME('09:00:00','08:00:00') as total

wobei hingegen folgendes nicht funktioneirt:
SELECT SUBTIME('2008-03-13 09:00:00','2008-03-13 08:00:00') as total


habe als format wie beschrieben DATETIME gewählt. müsste doch eigentlich so klappen oder?

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Flux: 13.03.2008 12:16.

13.03.2008 09:26 Flux ist offline E-Mail an Flux senden Homepage von Flux Beiträge von Flux suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Hm, also select * ist erstmal böse, solltest du dir abgewöhnen. Wenn du nur start und ende brauchst, ist das besser, wenn du sie auch nur in das select statement schreibst.

Und dann müsste es evtl. sogar mit einem select gehen:

code:
1:
SELECT SUBTIME(time_table.start,time_table.ende) as total from time_table



Zum Datumsformat:
Schau dir mal die MySQL Time und Date funktionen an, wenn das am selben Tag ist, müsstest du dir evtl. da nur die Zeit rausholen.


phlox

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
13.03.2008 12:19 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
Flux
Junior Member


images/avatars/avatar-2252.gif

Dabei seit: 24.08.2006
Beiträge: 169

Themenstarter Thema begonnen von Flux
      Zum Anfang der Seite springen

danke dir!

hab gemerkt, dass ich nicht SUBTIME sondern TIMEDIFF benutzen muss.

grz

€dit:

jetzt hab ich noch das folgende problem:

ich möchte nun auch wissen, wie gross der aufwand insgesamt ist.
habe schon einiges probiert, komme aber nicht zu einem entsprechenden ergebnis. hat jmd eine idee, wie ich das sinvoll löse, dass ich am ende den totalen aufwand in hh:mm habe, wenn ich z.B. 3 einträge habe?

ich habe zwar bei jedem durchlauf z.B. den aufwand des eintrages wie obe berechnet z.B. "02:00". wenn ich jedoch z.B. 02:00 + 02:22 rechne gibt es mir lediglich "4" aus und nicht "04:22".

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Flux: 13.03.2008 14:33.

13.03.2008 13:01 Flux ist offline E-Mail an Flux senden Homepage von Flux Beiträge von Flux suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Könntest du noch mal deinen aktuellen Code posten?
Sonst fehlt mir da irgendwie der Anhaltspunkt.

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
13.03.2008 15:02 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
Flux
Junior Member


images/avatars/avatar-2252.gif

Dabei seit: 24.08.2006
Beiträge: 169

Themenstarter Thema begonnen von Flux
      Zum Anfang der Seite springen

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
$sqls =    "select * from zeiterfassung order by id asc";
        $res    =    mysql_db_query($db$sqls$ident);
        
        while ( $output mysql_fetch_assoc $res )){
        
              
            $startdatum = ($output 'start' ]);
            $enddatum = ($output 'ende' ]);
                
            //// ZEITBERECHNUNG
                // total pro eintrag berechnen
                $aktualid     = ($output 'id' ]);
                $sqls_total "SELECT TIMEDIFF( '$enddatum', '$startdatum' ) AS total from zeiterfassung where id = $aktualid";
                $res_total    mysql_db_query($db$sqls_total$ident);
                $total         mysql_result($res_total,0,"total");
                $total         substr("$total"0, -3); 
                
                // datum "start" umformatieren
                $splitdate split("-"$startdatum);
                $start  substr("$splitdate[2]"02); // Tag
                $start .= ".";
                $start .= "$splitdate[1]."// Monat
                $start .= substr("$splitdate[0]."04); // Jahr in 2 stellen 
                $start .= " ";
                
                $splittime split(":"$startdatum);
                $start .= substr("$splittime[0]"113); // Stunden
                $start .= ":";
                $start .= "$splittime[1]"// Minute

                                // HIER STEHT DIE AUSGABE

                 }


dieser ablauf geht pro eintrag einmal durch (siehe while schlaufe auf zeile 4).
$total kann z.B. "02:22" oder "01:59" sein.
was ich also möchte ist zusammengerechnet die werte aller durchläufe in $total.

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Flux: 13.03.2008 15:24.

13.03.2008 15:21 Flux ist offline E-Mail an Flux senden Homepage von Flux Beiträge von Flux suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

code:
1:
select TIMEDIFF(start,ende) from zeiterfassung order by id asc


Und dann müsstest du evtl. in PHP mit dem datentyp date oder time das zusammen rechnen. Kenn mich da aber auch nicht so mehr aus, mach zur Zeit nix mit PHP.

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
13.03.2008 15:30 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
Flux
Junior Member


images/avatars/avatar-2252.gif

Dabei seit: 24.08.2006
Beiträge: 169

Themenstarter Thema begonnen von Flux
      Zum Anfang der Seite springen

im endeffekt stellt sich eigentlich nur die frage:

wie rechne ich "01:31" + "01:31", dass es korrekt "03:02" und nicht "2" ergibt.
13.03.2008 15:48 Flux ist offline E-Mail an Flux senden Homepage von Flux Beiträge von Flux suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Soweit ich das verstehe, müsstest du in PHP erstmal die Zeit in sekunden umrechnen, und dann addieren. Danach müsstest du dann wieder zurück umwandeln.

Das ließe sich notfalls aber auch schnell selber implementieren.

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
14.03.2008 20:16 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
Flux
Junior Member


images/avatars/avatar-2252.gif

Dabei seit: 24.08.2006
Beiträge: 169

Themenstarter Thema begonnen von Flux
      Zum Anfang der Seite springen

habs jetzt folgendermassen:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
$dauer1 "01:32";
$dauer2 "02:32";

// teilen
$splittime1 split(":"$dauer1);
$splittime2 split(":"$dauer2);

// minuten in sekunden
$splittime1sek = ($splittime1[0] * 60);
$splittime2sek = ($splittime2[0] * 60);

// addieren
$splittimetotalsek $splittime1sek $splittime2sek $splittime1[1] + $splittime2[1];

echo $splittimetotalsek;


nun hab ich mit $splittimetotalsek das total in sekunden. ich kann nun zwar durch 60 rechnen, weiss aber ned, wie ich die restlichen sekunden da wieder raus kriege?

mfg

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Flux: 15.03.2008 01:44.

15.03.2008 01:09 Flux ist offline E-Mail an Flux senden Homepage von Flux Beiträge von Flux suchen
Misel Misel ist männlich
Hüter des Kitkat


images/avatars/avatar-2084.png

Dabei seit: 02.11.2002
Beiträge: 1.203
Herkunft: live://home.berlin.d e

      Zum Anfang der Seite springen

php:
1:
2:
$totelminutes round($splittimetotalsek 600);
$totelseconds $splittimetotalsek 60;


http://www.php.net/operators.arithmetic

__________________
LAUFT! Ich spiele KILLERSPIELE!
15.03.2008 09:49 Misel ist offline E-Mail an Misel senden Homepage von Misel Beiträge von Misel suchen
Flux
Junior Member


images/avatars/avatar-2252.gif

Dabei seit: 24.08.2006
Beiträge: 169

Themenstarter Thema begonnen von Flux
      Zum Anfang der Seite springen

danke, habs jetzt noch einfacher lösen können, wusste bloss nicht, dass das so: geht

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
$dauer1 "01:32";
$dauer2 "02:32";

// stunden/minuten splitten
$splittime1 split(":"$dauer1);
$splittime2 split(":"$dauer2);

// minuten in sekunden umrechnen
$splittime1sek = ($splittime1[0] * 60);
$splittime2sek = ($splittime2[0] * 60);

// sekunden zusammenzählen
$splittimetotalsek $splittime1sek $splittime2sek $splittime1[1] + $splittime1[1];

// in format i:s umrechnen
echo date("i:s"$splittimetotalsek);
15.03.2008 16:56 Flux ist offline E-Mail an Flux senden Homepage von Flux Beiträge von Flux suchen
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
BlackBoard » Design, Programmierung & Entwicklung » Programmieren » PHP Zeiterfassung

Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH