Stundenunterschied

  • Hallo zusammen

    Ich habe folgendes Problem:

    In meiner DB sind Datensätze eingetragen, unter anderem auch mit einem timestamp.
    Nun möchte ich die vergangene Zeit in Stunden errechnen und hab mir folgenden Code überlegt:

    $timestart = $row->time;
    $timenow = time();

    $timediff = (($timenow-$timestart)/3600);
    echo "$timediff";

    $timestart entspricht: 2012-01-06 09:21:5
    $timenow entspricht: 2012-01-06 10:27:00

    Als $timediff wird ausgegeben: 368288.89472222

    Leider weiss ich nicht, was nicht stimmt und mit der Zahl kann ich auch nichts anfangen.
    Vielleicht könnt ihr mir helfen?

  • Gebe mal per echo $timestart und $timenow aus und schreibe mal, was darin steht

  • $timestart -> 2012-01-06 09:21:55
    $timenow -> 1325844162
    $timediff ->368289.48611111

    Liegt der Fehler bei $timenow oder?

    Habe das jetzt so gemacht:


    $timestart = $row->time;
    $timenow = date("Y-m-d H:i:s");
    $timediff = (($timenow-$timestart)/3600);

    Ausgegeben wird:
    $timestart -> 2012-01-06 09:21:55
    $timenow -> 2012-01-06 11:07:39
    $timediff -> 0

  • Leider bin in ein Anfänger in Sachen PHP.
    Wie ich diese Daten einzeln behandle und dann voneinander abziehe weiss ich nicht.
    Ich glaube zu wissen, dass es eine DateTime::diff - Funktion gibt, aber aber ich weiss nicht, wie die funktioniert...

  • $timestart -> 2012-01-06 09:21:55
    $timenow -> 1325844162

    Du subtrahierst Äpfel und Birnen. Das Datum steht nicht, wie von dir gesagt, als Timestamp in der Datenbank. Du könntest im Select mit UNIX_TIMESTAMP das Datum in einen Timestamp umwandeln, siehe http://dev.mysql.com/doc/refman/5.1…-functions.html

    Oder du arbeitest mit date_diff, siehe http://de2.php.net/manual/de/function.date-diff.php dort findest du auch Beispiele

    Einmal editiert, zuletzt von Bandit (6. Januar 2012 um 12:05)

  • Doch, das Datum steht in der DB als Timestamp.
    Denn $timestart ist der Timestamp, der DB...
    Dieser ist, wie wir bereits wissen:
    $timestart -> 2012-01-06 09:21:55
    Das Problem lag bei $timenow, diese Variable gab das Datum unformatiert aus....

    Ich habe nun folgendes Probiert:

    Code
    $timestart = $row->time;
    $time = date("H", $timestart)
    $timenow = date("H", time());

    Nun wird bei $timenow 12 angegeben, was stimmt, denn es ist 12 Uhr (12h)
    Nur bei $timestart weiss ich nicht, wie ich es in Stunden umwandle, habs mit $time probiert, es kommt aber 01 dabei raus.

  • $interval = date_diff($timestart, $timenow);

    Hast du das mal ausprobiert, die daten sind ja richtig.

    alxy

  • Danke alxy, habe das ausprobiert, funktioniert leider nicht, es wird einfach "nichts" angezeigt, alle anderen echos, nur nich dieses...

  • Das wäre der DateTime:diff - Code

    Code
    $datetime1 = new DateTime('2009-10-11');
    $datetime2 = new DateTime('2009-10-13');
    $interval = $datetime1->diff($datetime2);
    echo $interval->format('%R%a days');

    Soweit funktioniert der....
    Doch das ist das Datum im Code und nicht in einer DB..., ausserdem fehlt die Uhrzeit

  • In $timestart steht kein Unix-Timestamp!!! 2012-01-06 09:21:55 ist ein Datum!

  • Tut mir leid, hab dich da falsch verstanden. Werde es nun trotzdem mit der Funktion date_diff versuchen.
    Und das funktioniert auch schon ganz gut, doch nur mit dem Datum, im Code:

    Code
    $datetime1 = new DateTime('2012-01-06 09:21:55');
    			$datetime2 = new DateTime('2012-01-06 13:21:55');
    			$interval = $datetime1->diff($datetime2);
    			echo $interval->format('%H');

    Hier wird angezeigt: 04, was auch stimmt.
    Doch wie füge ich nun den Timestamp (Datum) hier ein?

  • So, habe es nun geschafft, vielen Dank euch beiden...
    Der Code zählt jetzt die vergangen Stunden. :)