PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dauer aus Zeiten berechnen


bruder-c
15.06.2003, 12:55:20
Hallo Leute
ich habe folgendes Problem:

Ich habe 2 Uhrzeiten (Format: HH:MM:SS) in einer Datenbank (MySQL) stehen. Nun möchte ich die Dauer der Zeit berechnen welche zwischen den Uhrzeiten vergangen ist. Ansich kein Problem, aber ich brauche auch die Ausgabe im Format "HH:MM:SS", und das bekomm ich irgendwie net hin.

Es wäre echt total nett wenn einer von Euch einen Vorschlag hätte wie ich das regeln könnte.

zu Verdeutlichung:

$dauer = $ende - $anfang;

ich brauche $dauer im Format(HH:MM:SS)



schon mal ganz viel lieben Dank im vorraus



mfg
Christian

Gweilo
15.06.2003, 13:59:59
gehst du davon aus, dass die Dauer nie mehr als ein Tag ist? (ich nehme an schon, denn sonst müsstest du das datum mitspeichern)

erst mal würde ich den string auseinandernehmen:
$zeit1 = explode(":",$anfang);
$zeit2 = explode(":",$ende);

$stunden = $zeit2[0]-$zeit1[0];
if ($stunden<0)
$stunden+=24;

Das mit den minuten und sekunden solltest du selbst noch schaffen, mit hilfe dieses Ansatzes

c4
15.06.2003, 14:01:12
Ich weiß ja nicht, welche Einheit das Ergebnis hat. Wenn es Sekunden sind, dann kannst Du mit date() arbeiten.

bruder-c
15.06.2003, 15:25:39
Hallo Gweilo
Die Dauer ist immer < als 1 Tag.
Danke für Deine Hilfe. Hab das mal so gemacht und bekomme auch das gewünschte Ergebniss zurück. An's splitten hatte ich auch gedacht, dachte aber auch das PHP (oder MySQL) besser mit Zeiten umgehen könnten, denn diese Lösung (auch wenn Sie geht) ist schon etwas aufwendig.
Nochmal zu meinen Problem:
Mein Scrippt soll Arbeitsanfang und Ende aufnehmen und in eine Datenbank schreiben (alles kein Problem) anschließend will ich in einer Übersicht (Tabelle -> pro Zeile ein Tag) mir in der letzten Spalte die Überstunden anzeigen lassen welche an den einzelnen Tagen gemacht wurden.



hier ist ein link zu meinen Script (ist natürlich noch in der Entwicklung):
http://time.perlnet.de


ach ja, musste grade den Beitrag nochmal editieren um weitere Details zu hinterlegen.
In der MySQL Datenbank sind reguläre 'time'Felder belegt, und das time-Format ist '0000-00-00'.

|Coding
15.06.2003, 15:32:28
hi,

eine andere möglichkeit wäre, die daten im unix timestamp format zu speichern. diese sehen so aus 12345678.

dann kannst du ganz easy 23455436 - 12323456 rechnen und du hast die korrekte differenz der zeiten. das ganze kannst du dann noch mit mktime() umrechnen lassen und fertig ist.

bruder-c
15.06.2003, 15:35:53
@ |Coding

Thx
die Zeiten muss ich im Formular erst mal (quasi) Normal eigeben (im Format : HH:MM:SS).
Wie bekomme ich dann die Zeiten in das timestamp format konvertiert ?

bruder-c
15.06.2003, 16:31:47
So, zum Abschluss:
Erstmal Danke an die Helfer.
Auch wenn ich denke das die Lösung von |Coding bestimmt die bessere ist, habe ich alles mit der Lösung von Gweilo gemacht.
Ansich ist mein Problem damit gelöst.



THX

Gruß Christian

|Coding
15.06.2003, 16:49:55
Hi,

Schau mal, das ist nicht all zu schwer. Du musst Dein Datum, das aus einem Form kommt, erst mal splitten und dann mit mktime bearbeiten.


<?PHP
$eingabe = '15.6.2003';
$date = explode('.', $eingabe);
$timestamp = mktime(0, 0, 0, $date[1], $date[0], $date[2]);
?>


Der Vorteil bei dieser Methode ist, dass es unabhängig von der Datendifferenz arbeitet. Es ist also egal ob 1 Tag, 1 Monat oder 10 Jahre zwischen den daten vergangen ist.

So kannst Du ganz einfach timestamp1 - timestamp2 (oder anders rum, jenachdem welcher timestamp größer ist) rechnen, das ergebnis noch umrechnen und ausgeben oder was auch immer:


<?PHP
print ($ergebnisdifferenz_der_timestamps / 86400); // Ausgabe in Tagen
?>


Wenn Du jetzt noch die Monate und Jahre berechtet haben willst, musst Du Dir dafür noch etwas weiteren code ausdenken, das ist mir jetzt zu umfangreich, als dass ich das auch noch mache :-)


ich hätte wohl schneller tippen sollen :-)

bruder-c
15.06.2003, 19:07:50
Super....Danke!


Ich denke das ich Deine Lösung übernehmen werde





mfg
Christian

|Coding
15.06.2003, 20:48:50
Kein Ding, so ist der Denksport nicht umsonst gewesen :-)