Probleme mit der Zeitumrechnung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme mit der Zeitumrechnung

    Hallo zusammen.

    Ich habe eine Datenbank mit zwei Spalten, in der ersten den mySQL Timestamp für login eines Users und in der zweiten den Timestamp für die Abmeldung. Jetzt möchte ich gerne berechnen wie viel Zeit dazwischen vergangen ist und dieses als Liste in Sekunden ausgeben.

    Ich habe hier schon mal was programmiert, doch es erscheit immer nur 0 sec.
    Vielleicht seht Ihr den Fehler in meinem Script, ich habe schon alles zig mal umgestellt und auseinander gebastel, doch ich finde den Fehler nicht.

    Die eintelnen Werte zieht er sich schon richtig aus der DB, nur beim Umrechnen mit mktime() scheint was falsch zu laufen.

    <?
    include("config.inc");

    $res1 = mysql_query("SELECT * FROM timescale");

    ?>

    --- HTML Kopf usw.----

    <?
    while ($cur = mysql_fetch_array($res1)){

    // Die ersten Timestamps hat er mir nicht richtig gesetzt
    // Anstatt 01062002 hat er nur 1062002 geschrieben deshalb die IF-Abfragen.

    $t1 = $cur['time1'];
    if (strlen($t1) < 14){ $t1 = "0".$t1;}

    $t2 = $cur['time2'];
    if (strlen($t2) < 14){ $t2 = "0".$t2;}

    $a1 = substr($t1,8,2);
    $a2 = substr($t1,10,2);
    $a3 = substr($t1,12,2);
    $a4 = substr($t1,2,2);
    $a5 = substr($t1,0,2);
    $a6 = substr($t1,4,4);

    $b1 = substr($t2,8,2);
    $b2 = substr($t2,10,2);
    $b3 = substr($t2,12,2);
    $b4 = substr($t2,2,2);
    $b5 = substr($t2,0,2);
    $b6 = substr($t2,4,4);

    $nt1 = mktime($a1,$a2,$a3,$a4,$a5,$a6);
    $nt2 = mktime($b1,$b2,$b3,$b4,$b5,$b6);

    print $nt2." - ".$nt1. " = ".$nt2-$nt1." sec.<br>";


    Warum will das nicht???
    Ich glaube beim Auslesen mit subst(9 gekt was kaput, aber die Reihenfolge habe ich mehrmals überprüft.

    Habe auch mal die Werte $a1 bis $a6 manuell eingegeben, dann spuckt er den richtigen Timestamp aus. Eber es macht auch einen Unterschied ob ich
    $a1 = 06; oder $a1 = "06"; angebe.
    Woran liegt das, muss ich die Werte in einen echten Integer umwandeln und wenn wie?

    Please Help...

    Verzweifelte Grüße,
    Andi

  • #2
    probiers mal mit intval() http://www.php.net/manual/de/function.intval.php
    PHP-Code:
    $a1 intval(substr($t1,8,2));
    $a2 intval(substr($t1,10,2));
    $a3 intval(substr($t1,12,2));
    $a4 intval(substr($t1,2,2));
    $a5 intval(substr($t1,0,2));
    $a6 intval(substr($t1,4,4));

    $b1 intval(substr($t2,8,2));
    $b2 intval(substr($t2,10,2));
    $b3 intval(substr($t2,12,2));
    $b4 intval(substr($t2,2,2));
    $b5 intval(substr($t2,0,2));
    $b6 intval(substr($t2,4,4));
    print 
    "a1:$a1 a2:$a2 a3:$a3 a4:$a4 a5:$a5 a6:$a6<br>\n"
    print 
    "ab:$b1 b2:$b2 b3:$b3 b4:$b4 b5:$b5 b6:$b6<br>\n"

    Kommentar


    • #3
      Die werte gibt er mir hiermit schon alle richtig aus:

      print_"a1:$a1_a2:$a2_a3:$a3_a4:$a4_a5:$a5_a6:$a6<br>\n";_
      print_"ab:$b1_b2:$b2_b3:$b3_b4:$b4_b5:$b5_b6:$b6<br>\n";

      allerdings wird z.B. aus "08" jetzt "8" und das Ergebnis bleibt immer noch auf 0 sec.

      Kommentar


      • #4
        PHP-Code:
        $nt1 mktime($a1,$a2,$a3,$a4,$a5,$a6);
        $nt2 mktime($b1,$b2,$b3,$b4,$b5,$b6);
        print 
        "nt1:$nt1 nt2:$nt2<br>\n"
        Poste mir bitte mal je einen Inhalt von $t2 und $t1, damit ich es testen kann.

        Kommentar


        • #5
          Mittlerweile zeigst sogar was an.
          aber über 700 Mio. sekunden sind etwas übertrieben

          nt1:1022911803 nt2:1739437447

          Die Dazugehörigen Timestamps sind

          01062002081003 und 01062002081647

          Es dürftes also nur knapp 6 minuten dazwischen liegen


          Dank & Gruß

          Kommentar


          • #6
            PHP-Code:
            <?
            $t1 = "01062002081003";
            $t2 = "01062002081647";

            $a1 = substr($t1,8,2);  // Stunde
            $a2 = substr($t1,10,2); // Minute
            $a3 = substr($t1,12,2); // Sekunde
            $a4 = substr($t1,2,2);  // Monat
            $a5 = substr($t1,0,2);  // Tag
            $a6 = substr($t1,4,4);  // Jahr

            $b1 = substr($t2,8,2);
            $b2 = substr($t2,10,2);
            $b3 = substr($t2,12,2);
            $b4 = substr($t2,2,2);
            $b5 = substr($t2,0,2);
            $b6 = substr($t2,4,4);

            $nt1 = mktime($a1,$a2,$a3,$a4,$a5,$a6);
            $nt2 = mktime($b1,$b2,$b3,$b4,$b5,$b6);

            $diff = $nt2-$nt1;

            print "$nt2 - $nt1 = ".$diff."sec.<br>";
            // Ergebnis der Ausgabe: "1022912207 - 1022911803 = 404sec."
            ?>
            Schaut gut aus.

            Was mich stutzig macht ist folgendes:
            PHP-Code:
            print $nt2." - ".$nt1" = ".$nt2-$nt1." sec.<br>";
            // Ergebnis der Ausgabe: "404 sec."
            // ohne die Inhalte der Variablen $nt2 bzwe $nt1 !!! 
            Probier die Berechnung mit dem Zwischenschritt
            $diff = ....

            Kommentar


            • #7
              Ha, jetzt läufts,

              hat an den blöden Timestamps gelegen, die vorne keine 0 hatten.
              Habe das If umgestellt, jetzt gehts!

              Danke vielmals!!!

              Kommentar

              Lädt...
              X