small-step: seltsames ergebnis beim vergleichen von timestamps

Hi,

ich habe ein kleines Script, in dem das aktuelle Datum als Timestamp mit einem in der Datenbank abgelegten Datum, ebenfalls als Timestamp, verglichen wird. Seltsamerweise teilt mir mein Script jetzt mit, dass der 11.07.2003, der 25.06.2003 und der 21.06.2003 weniger als einen Tag, also 86400 Sekunden, vom aktuellen Datum entfernt sind. Hier ein kleiner Auszug...

if($result['faelligkeit']-time() < 86400)
{
    ...
}

Beim 21.06.2003 bin ich auch voll und ganz einverstanden, bei den anderen beiden... nicht so ganz. Interessant finde ich allerdings die Tatsache, dass das Script steif und fest behauptet der 23.06.2003 wäre mehr als einen Tag entfernt (was ja auch stimmt), sich aber nicht davon überzeugen lässt, dass das beim 25.06 und beim 11.07 auch so ist...

Weiß jemand was ich hier verbockt hab?

Grüße,
Small-Step

  1. Holladiewaldfee,

    if($result['faelligkeit']-time() < 86400)

    Laß Dir doch mal ausgeben, was $result['faelligkeit']-time() so ergibt ...

    Ciao,

    Harry

    --
      Man weiß erst was man hatte, wenn man es verloren hat.
      Intelligenz ist nicht zwingend etwas positives.
    1. hi,

      Laß Dir doch mal ausgeben, was $result['faelligkeit']-time() so ergibt ...

      1706572... also deutlich mehr als 86400 :-)

      beim 23.06:  147999
      beim 21.06:  -7415
      beim 25.06:  324279
      beim 11.07:  1706572

      und nur beim 21.06 und beim 23.06 wird es richtig angezeigt...

      gruß,
      small-step

      1. hi,

        und nur beim 21.06 und beim 23.06 wird es richtig angezeigt...

        also jetzt dreh ich echt gleich durch... ich hab noch einen zweiten eintrag mit dem 23.06 reingesetzt, der wird jetzt wieder falsch berechnet, der andere immer noch richtig. ich glaube ich bin einfach zu doof dafür...

        gruß,
        small-step

        1. Holladiewaldfee,

          also jetzt dreh ich echt gleich durch... ich hab noch einen zweiten eintrag mit dem 23.06 reingesetzt, der wird jetzt wieder falsch berechnet, der andere immer noch richtig. ich glaube ich bin einfach zu doof dafür...

          Spuck mal ein bißchen mehr von Deinem Code aus.
          Vielleicht liegt der Fehler irgendwo weiter vorne.

          Ciao,

          Harry

          --
            Man weiß erst was man hatte, wenn man es verloren hat.
            Intelligenz ist nicht zwingend etwas positives.
          1. hi,

            Spuck mal ein bißchen mehr von Deinem Code aus.
            Vielleicht liegt der Fehler irgendwo weiter vorne.

            aber gern :-)

            ----Verbindungsaufbau und auslesen----
                $db = @mysql_connect($db_server,$db_user,$db_passwort) or die ("Verbindungsaufnahme mit MySQL-Server fehlgeschlagen");
                $db_select = @mysql_select_db($db_name);
                $db_query = "SELECT id,von,an,text,prioritaet,datum,faelligkeit,status FROM to_do ORDER BY prioritaet ASC";

            $result = mysql_query($db_query, $db);
                $result_show = array();
            --------------------------------------

            ----Datenbankstruktur-----------------
                id              smallint(5)
                von             tinyint(3)
                an              tinyint(3)
                text            text
                prioritaet      tinytext
                datum           tinytext
                faelligkeit     tinytext
                status          tinyint(3)
            --------------------------------------

            vielleicht, bzw. wahrscheinlich hab ich irgendwas richtig dämliches eingebaut... wie immer halt :-)

            gruß,
            small-step

            1. Holladiewaldfee,

              faelligkeit     tinytext

              Da steht doch ein timestamp drin von der Form 10656452 (oder so).
              Warum also tinytext und nicht einfach bigint?

              Ansonsten:
              Klappt
              if((integer)($result['faelligkeit']-time()) < 86400)
              ?

              Ciao,

              Harry

              --
                Man weiß erst was man hatte, wenn man es verloren hat.
                Intelligenz ist nicht zwingend etwas positives.
              1. hi,

                if((integer)($result['faelligkeit']-time()) < 86400)
                ?

                nein, klappt beides nicht. leider. ich hab es jetzt allerdings zum laufen gebracht indem ich die abfrage komplett auf den kopf gestellt habe. noch ein wenig testen, aber es sieht gut aus. danke für die hilfe :-)

                gruß,
                small-step

                1. Holladiewaldfee,

                  nein, klappt beides nicht. leider. ich hab es jetzt allerdings zum laufen gebracht indem ich die abfrage komplett auf den kopf gestellt habe. noch ein wenig testen, aber es sieht gut aus. danke für die hilfe :-)

                  Kannst Du mal posten, wie Du's jetzt gemacht hast?
                  Vielleicht lassen sich dadurch ja einige Rückschlüsse auf den ursprünglichen Fehler ziehen ... täte mich nämlich echt interessieren, was da nicht gestimmt hat.

                  Ciao,

                  Harry

                  --
                    Man weiß erst was man hatte, wenn man es verloren hat.
                    Intelligenz ist nicht zwingend etwas positives.
                  1. hi,

                    Kannst Du mal posten, wie Du's jetzt gemacht hast?
                    Vielleicht lassen sich dadurch ja einige Rückschlüsse auf den ursprünglichen Fehler ziehen ... täte mich nämlich echt interessieren, was da nicht gestimmt hat.

                    aber gern...

                    $differenz = $result_show['faelligkeit']-time();
                        if($differenz > 86400) {
                            $status = "";
                        }
                        else {
                            $status = " class="urgent"";
                        }

                    seltsamerweise funktioniert es nicht, wenn ich statt größer einfach kleiner schreibe... komisch...

                    gruß,
                    small-step

                    1. Holladiewaldfee,

                      $differenz = $result_show['faelligkeit']-time();

                      Hast Du das alte $result absichtlich in $result_show geändert oder war das der Fehler?

                      Ciao,

                      Harry

                      --
                        Man weiß erst was man hatte, wenn man es verloren hat.
                        Intelligenz ist nicht zwingend etwas positives.
                      1. hi,

                        Hast Du das alte $result absichtlich in $result_show geändert oder war das der Fehler?

                        ich hatte das in dem ersten posting abgeändert um es ein wenig kürzer zu halten :-) es war schon immer $result_show, ich habe auf der seite ein paar datenbankabfragen die ich nicht unbedingt durcheinanderbringen wollte :-)

                        gruß,
                        small-step

  2. Hallo,

    bin ich auch schon mal drauf reingefallen. Eigentlich ist das kein PHP, sondern ein MySQL-Problem. Timestamps werden von MySQL bei der Wiedergabe (Query) als Datumsstring umgerechnet.

    Wenn Du das nicht willst, musst Du Deine Abfrage anpassen:

    Select ID, Unix_Timestamp(<Timestampfeld>) as TStamp from <Table> where ...

    Dann erhältst Du tatsächlich den Unix-Timestampwert.

    Viel Erfolg

    Chris

    1. hi,

      Dann erhältst Du tatsächlich den Unix-Timestampwert.

      leider auch nicht, irgendwas bringt er dann wohl durcheinander. ich habe die timestamps in tinytext-felder geschrieben, könnte es daran liegen?

      gruß,
      small-step