Cindy: Datetime(timestamp) zu Unix_timestamp

Hallo,
ich habe in meiner mysql Datenbank eine Spalte mit dem Typ timestamp, was z Bsp. so aussieht "2008-03-27 10:09:25".
Da ich aber nur die Zeilen anzeigen möchte, die nicht älter als 12h Stunden sind, wäre es doch hilfreich die Zeit in Sekunden (unix_timestamp) umzuwandeln und dann die Differenz mit der der jetzigen Zeit (time()-Funktion in PHP) ermitteln.
Kann mir jemand sagen wie das geht?
ODer gibt es einen eleganteren Weg?

Vielen Dank.

  1. ich habe in meiner mysql Datenbank eine Spalte mit dem Typ timestamp, was z Bsp. so aussieht "2008-03-27 10:09:25".
    Da ich aber nur die Zeilen anzeigen möchte, die nicht älter als 12h Stunden sind, wäre es doch hilfreich die Zeit in Sekunden (unix_timestamp) umzuwandeln und dann die Differenz mit der der jetzigen Zeit (time()-Funktion in PHP) ermitteln.

    Wozu PHP bemühen für etwas, das mysql von Haus aus kann?

    ODer gibt es einen eleganteren Weg?

    Ja, siehe http://dev.mysql.com/doc/refman/5.1/de/date-and-time-functions.html, dort gleich das erste Beispiel.

    JJ

  2. Hi Cindy,

    ich habe in meiner mysql Datenbank eine Spalte mit dem Typ timestamp, was z Bsp. so aussieht "2008-03-27 10:09:25".
    Da ich aber nur die Zeilen anzeigen möchte, die nicht älter als 12h Stunden sind, wäre es doch hilfreich die Zeit in Sekunden (unix_timestamp) umzuwandeln und dann die Differenz mit der der jetzigen Zeit (time()-Funktion in PHP) ermitteln.
    Kann mir jemand sagen wie das geht?
    ODer gibt es einen eleganteren Weg?

    Du kannst einen TimeStamp mit Hilfe von mktime() in den UnixTimeStamp umwandeln.
    Auf den Seiten dort findest du auch andere Funktionen, wo du auch mit den verschiedenen TimeStamps rechnen kannst.

    ciao
    romy

    1. Du kannst einen TimeStamp mit Hilfe von mktime() in den UnixTimeStamp umwandeln.
      Auf den Seiten dort findest du auch andere Funktionen, wo du auch mit den verschiedenen TimeStamps rechnen kannst.

      ciao
      romy

      mktime funktioniert doch nur für dieses Format (0, 0, 0, 3, 0, 2000). Mein Datum sieht aber so aus 2008-03-27 10:09:25.
      Muss ich das noch umwandeln?
      Wenn ja, wie?
      Danke

      1. Du kannst einen TimeStamp mit Hilfe von mktime() in den UnixTimeStamp umwandeln.
        Auf den Seiten dort findest du auch andere Funktionen, wo du auch mit den verschiedenen TimeStamps rechnen kannst.

        Und was, wenn man von 1000 möglichen Datensätzen nur 10 braucht? Abfrage 1000 Datensätze und dann mit PHP 990 auf den Müll geschmissen?

        mktime funktioniert doch nur für dieses Format (0, 0, 0, 3, 0, 2000). Mein Datum sieht aber so aus 2008-03-27 10:09:25.
        Muss ich das noch umwandeln?

        Nein, nein und nochmals nein! Damit klar wird, was ich meine:

        SELECT feld1, feld2, feld3
        FROM name_der_tabelle
        WHERE DATE_SUB( CURDATE(), INTERVAL 12 HOUR ) <= name_der_datumsspalte

        Das liefert dir exakt die Datensätze, die innerhalb von 12 Stunden vor dem aktuellen Datum liegen. Damit braucht man PHP zumindest für den Teil nicht mehr.

        1. Nein, nein und nochmals nein! Damit klar wird, was ich meine:

          SELECT feld1, feld2, feld3
          FROM name_der_tabelle
          WHERE DATE_SUB( CURDATE(), INTERVAL 12 HOUR ) <= name_der_datumsspalte

          Das liefert dir exakt die Datensätze, die innerhalb von 12 Stunden vor dem aktuellen Datum liegen. Damit braucht man PHP zumindest für den Teil nicht mehr.

          Danke, das funktioniert wunderbar. Dachte auch, dass damit mein Problem gelöst ist. Allerdings wollte ich das nicht nur für die Anzeige nutzen.
          Sondern ich habe eine Tabelle mit den letzten 6 Änderungen:
          wert1 datum
          wert2 datum
          wert3 datum
          wert4 datum
          wert5 datum
          wert6 datum

          die datümer, die jünger als 12 h sind, sollen grün angezeigt werden. glaube, dass ich es deshalb doch mit php machen muss.

          1. Hi,

            Allerdings wollte ich das nicht nur für die Anzeige nutzen.
            Sondern ich habe eine Tabelle mit den letzten 6 Änderungen:
            wert1 datum
            wert2 datum
            wert3 datum
            wert4 datum
            wert5 datum
            wert6 datum

            die datümer, die jünger als 12 h sind, sollen grün angezeigt werden. glaube, dass ich es deshalb doch mit php machen muss.

            Das gruen Faerben - ggf. ja.
            Den Rest - nein.

            SELECT ...,
              IF (
                DATE_SUB( CURDATE(), INTERVAL 12 HOUR ) <= name_der_datumsspalte,
                1,
                0
              ) AS aelterAls12Stunden
            FROM ...

            (Vom Prinzip, keine Garantie aus syntaktische Korrektheit.)

            MfG ChrisB

        2. Hi Jaroslav,

          Nein, nein und nochmals nein! Damit klar wird, was ich meine:

          Warum nicht? Klar, dass es meist/manchmal besser ist gleich die Datenbank zu bemühen, aber manche Beispiele eignen sich auch gut um eine Programmiersprache kennenzulernen. Ich finde deinen Hinweis gut, aber er schließt andere Hinweise über andere Möglichkeiten nicht aus.
          Lass den Menschen doch eigene Entscheidungen und gib ihnen einfach Möglichkeiten, manchmal lernt man dabei sogar noch was.

          ciao
          romy

      2. Hi Cindy,

        Du kannst einen TimeStamp mit Hilfe von mktime() in den UnixTimeStamp umwandeln.
        Auf den Seiten dort findest du auch andere Funktionen, wo du auch mit den verschiedenen TimeStamps rechnen kannst.
        mktime funktioniert doch nur für dieses Format (0, 0, 0, 3, 0, 2000). Mein Datum sieht aber so aus 2008-03-27 10:09:25.
        Muss ich das noch umwandeln?

        Ja, bzw. nicht umwandeln, sondern zerstückeln.
        Du kannst z.B. mit der Funktion date-parse() ein schönes associative array zurückbekommen und dann dein Format wieder zusammensetzen.
        Du kannst auch mal auf der PHP-Seite die Kommentare lesen, manchmal sind da recht schöne Codeschnipsel drin, welche vielleicht auch genau das machen, was du möchtest. Z.B. bei mk_time das Beispiel von Saidur Rahman (Rana).

        ciao
        romy