|
|
|
|
Zeiterfassung |
Flux
Junior Member
Dabei seit: 24.08.2006
Beiträge: 169
|
|
Zeiterfassung |
|
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 |
|
|
phlox81
Bote des Lichts und Moderator
Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo
|
|
Das lässt sich doch alles per SQL machen.
Als Datentyp für die Tabelle würde ich DATE oder DATETIME vorschlagen
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 |
|
|
phoenix
Moderator
Dabei seit: 22.08.2003
Beiträge: 1.157
|
|
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 |
|
|
Flux
Junior Member
Dabei seit: 24.08.2006
Beiträge: 169
Themenstarter
|
|
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 |
|
|
phlox81
Bote des Lichts und Moderator
Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo
|
|
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
Bote des Lichts und Moderator
Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo
|
|
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 |
|
|
Flux
Junior Member
Dabei seit: 24.08.2006
Beiträge: 169
Themenstarter
|
|
|
|
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]", 0, 2); // Tag
$start .= ".";
$start .= "$splitdate[1]."; // Monat
$start .= substr("$splitdate[0].", 0, 4); // Jahr in 2 stellen
$start .= " ";
$splittime = split(":", $startdatum);
$start .= substr("$splittime[0]", 11, 3); // 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 |
|
|
phlox81
Bote des Lichts und Moderator
Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo
|
|
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 |
|
|
Flux
Junior Member
Dabei seit: 24.08.2006
Beiträge: 169
Themenstarter
|
|
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 |
|
|
phlox81
Bote des Lichts und Moderator
Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo
|
|
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 |
|
|
Misel
Hüter des Kitkat
Dabei seit: 02.11.2002
Beiträge: 1.203
Herkunft: live://home.berlin.d
e
|
|
|
15.03.2008 09:49 |
|
|
Flux
Junior Member
Dabei seit: 24.08.2006
Beiträge: 169
Themenstarter
|
|
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 |
|
|
|
|
|
|