Antworten auf deine Fragen:
Neues Thema erstellen

Falsche Zeitdifferenz in PHP

owieortho

Aktives Mitglied

Hallo,

wahrscheinlich nur eine Kleinigkeit oder ein Denkfehler.

Ich lese aus einer MySQL-DB Anfangs- und Endzeiten in ein Array aus. Beide Zeiten werden korrekt dargestellt. Wenn ich dann aber die Differenz bilde, wird mir eine Stunde mehr angezeigt, als wirklich herauskommen müsste.

PHP:
 $anfang = date("H:i", strtotime($datensatz[2]));
 $ende = date("H:i", strtotime($datensatz[3]));
 $dauer = date("H:i", strtotime($ende)-strtotime($anfang));
 echo $dauer;

Sieht jemand, woran es hängt? Vielen Dank schon mal
O.
 

Bertram_Heinrichs

Aktives Mitglied

AW: Falsche Zeitdifferenz in PHP

Poste mal bitte die Ausgabe von echo $anfang, echo $ende und echo $dauer

Btw, warum speicherst du die Daten nicht als date-Typ in der Datenbank?
 

Curanai

Aktives Mitglied

AW: Falsche Zeitdifferenz in PHP

Guten Morgen zusammen,

wie man in div. Foren lesen konnte, hat strtotime() durchaus ein Problem als Funktion (Stichwort: "+1 month"). Ich kann mir also durchaus vorstellen, dass es ein "internes Ding" sein könnte.

Von daher frage ich mal an, ob date_default_timezone_set() gesetzt wird, bevor mit Zeit- und Datumangaben gearbeitet wird. Ich entsinne mich dunkel, dass ich selbst bei einer Zeitsteuerung ohne (!) Schwierigkeiten hatte im Bereich Sommer-/Winterzeit.

Alternativ könnte es auch sein, dass die verwendete PHP-Version ein wenig "alt" ist - es gab mal Probleme mit dem Befehl, da dieser nicht "von links nach rechts" sauber gearbeitet hat und interessante Ergebnisse zurücklieferte (auch gern syntaktisch nicht korrekt - bspw. 30. April).

Abschließend sieht es für mich aber wie eine "Arbeitszeiterfassung" aus - und date() ist was zur Datumerzeugung (wodurch Du eine Differenz eben so nicht packen wirst können) - nicht zur Berechnung zwischen zwei Zeitstempeln. Mit Deiner Berechnung sagst Du vielmehr, welcher Tag wäre, wenn Du die Arbeitszeit wieder abgezogen hast (vom Endpunkt) ... :p

Ich würde eher die Differenz zwischen beiden Zeitpunkten bestimmen und mit einer Ganzzahldivision (= 60 min [!]) attackieren, mit dem Ergebnis eine Gegenrechnung machen und die Differenz davon letztendlich noch zwecks Minuten aufbrechen.

Aber - hey! - ich habe noch nicht genug Kaffee drin, um hier qualitativ hochwertige Antworten reinzureichen. :D

Grüße von meinem ersten Kaffeebecherrand des Tages - und ja, ich lasse die Beine gerade baumeln.
 

Curanai

Aktives Mitglied

AW: Falsche Zeitdifferenz in PHP

Sorry, Doppelpost ... kratzt mich, beißt mich - gebt mir Tiernamen!

Hier die Bestätigung in Form von Quelcode:
PHP:
// gestrige Arbeitszeit
$start         = mktime(5,0,0,9,18,2013);
$ende         = mktime(23,8,0,9,18,2013);
$diff         = $ende - $start;
$stunden    = bcdiv($diff, 3600);

$rest         = $diff - ($stunden * 3600);
$minuten    = bcdiv($rest, 60);

echo "Echte Arbeitszeit: " . $stunden . ":" . $minuten . "<br />";
echo "orthos Datum: " . date("H:i", $diff);

Starken Tag ...
 

owieortho

Aktives Mitglied

AW: Falsche Zeitdifferenz in PHP

Hallo und guten Morgen,
Poste mal bitte die Ausgabe von echo $anfang, echo $ende und echo $dauer

Btw, warum speicherst du die Daten nicht als date-Typ in der Datenbank?

In der DB werden die beiden Werte im Datentyp TIME gespeichert.Da ich die Sekunden nicht benötige nehme ich den Weg über strtotime und date. Hier eine beispielsweise Ausgabe:
$anfang -> 15:32
$ende -> 15:48
$dauer -> 01:16 / und ich hätte gerne 0:16

wie man in div. Foren lesen konnte, hat strtotime() durchaus ein Problem als Funktion (Stichwort: "+1 month"). Ich kann mir also durchaus vorstellen, dass es ein "internes Ding" sein könnte.

Von daher frage ich mal an, ob date_default_timezone_set() gesetzt wird, bevor mit Zeit- und Datumangaben gearbeitet wird. Ich entsinne mich dunkel, dass ich selbst bei einer Zeitsteuerung ohne (!) Schwierigkeiten hatte im Bereich Sommer-/Winterzeit.

Das werde ich mir noch anschauen.

Alternativ könnte es auch sein, dass die verwendete PHP-Version ein wenig "alt" ist -

PHP Version 4.4.9-nmm4

Abschließend sieht es für mich aber wie eine "Arbeitszeiterfassung" aus - und date() ist was zur Datumerzeugung (wodurch Du eine Differenz eben so nicht packen wirst können) - nicht zur Berechnung zwischen zwei Zeitstempeln. Mit Deiner Berechnung sagst Du vielmehr, welcher Tag wäre, wenn Du die Arbeitszeit wieder abgezogen hast (vom Endpunkt) ... :p

Ich würde eher die Differenz zwischen beiden Zeitpunkten bestimmen und mit einer Ganzzahldivision (= 60 min [!]) attackieren, mit dem Ergebnis eine Gegenrechnung machen und die Differenz davon letztendlich noch zwecks Minuten aufbrechen.

Nicht ganz eine Arbeitszeiterfassung, aber vom Prinzip her genau das Gleiche. Ich hatte gehofft, dass es einen kürzeren Weg gibt, als den von Dir später geposteten Quelltext.

Allen einen erfolgreichen Tag
O.
 

Duddle

Posting-Frequenz: 14µHz

AW: Falsche Zeitdifferenz in PHP

Der Unix-Timestamp ist zwar die Anzahl Sekunden, die seit dem 1.1.1970 vergangen ist, aber wenn du ihn mit date() formatieren / interpretieren willst, steht er für einen konkreten Zeitpunkt. Zeitpunkte unterliegen Zeitzonen und date() automatisch nutzt die vom Server eingestellte Zeitzone. Wenn also 960 Sekunden vergangen sind, sind das zwar 16 Minuten, aber in GMT+1 ist das eben 01:16 Uhr.

Du könntest daher die Zeitzone mit date_default_timezone_set() auf UTC oder GMT setzen, einfacher wäre aber für die letzte Berechnung zu nutzen.


Duddle
 

Bertram_Heinrichs

Aktives Mitglied

AW: Falsche Zeitdifferenz in PHP

Habe auch noch nicht den optimalen Koffeinlevel erreicht:)
Ich frage mich, ob es generell Sinn macht, formatierte Zeitwerte in eine Datenbank abzulegen. Wenn man nur den timestamp verwendet - auch bei Berechnungen - sollte es doch keine Probleme geben. Und eben erst zum Schluß für die Ausgabe in "human readable time format" konvertieren.
 

p3t6

Noch nicht viel geschrieben

AW: Falsche Zeitdifferenz in PHP

Meiner Erfahrung nach ist es einfacher nur dir timestsamps abzulegen. Die Human readable form kannst du dann ja immer wieder "drüberziehen".
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.614
Beiträge
1.538.351
Mitglieder
67.525
Neuestes Mitglied
mgtaucher
Oben