Ankündigung

Einklappen
Keine Ankündigung bisher.

Beitragsansicht

Einklappen

wie kann man datums vergleichen

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

  • wie kann man datums vergleichen

    ich habe folgendes problem:
    In einer mysql datenbank will ich daten speichern die ein datum haben.
    wenn das datum abgelaufen ist (später wie heute) wird dieser datensatz gelöscht!
    aber wie kann ich datums miteinander vergleichen. inerhalb von mysql ist das ja kein problem aber wie kann man datums angaben wie z.b. 2005-12-24
    in PHP vergleichen
    danke mollitz

  • #2
    1 Datum, 2 Daten

    Wandele die Daten in Timestamps um, dann ist das kein Problem mehr.

    Gruß
    phpfan

    Kommentar


    • #3
      In PHP lassen sich Daten am besten in UNIX-Timestamps vergleichen. Ein Datum im oben angesprochenen Format kannst du in PHP mit strtotime() bzw. in MySQL mit UNIX_TIMESTAMP() in einen UNIX-Zeitstempel umwandeln. Allerdings ist die Frage warum du diese Einschränkung unbedingt mit PHP vornehmen willst und nicht in der Abfrage.

      Kommentar


      • #4
        Speicher deine Datensätze am besten gleich als timestamp in der datenbank ab. Dann hast du später überhaupt keine probleme mehr mit vergleichen, berechnen usw.

        Kommentar


        • #5
          hab ich gespeichert

          also in der datenbank hab ichs glaub schon als timestamp gespeichert
          ich hab die datenbank mit PHPmyAdmin gemacht. ja und da hab ich halt date angegeben

          is des richtig??
          und dann kann ich in php des einfach in variablen speichern und dann vergleichen?????
          dnake mollitz

          Kommentar


          • #6
            Das Date-Format ist leiter kein Timestamp.

            Timestamps sind die Anzahl der sekunden die Seit dem 1.1.1970 vergangen sind.
            Das ist aber eher Nebensache. Und im gegensatz zu DATE lassen sich timestamps viel einfacher vergleichen. Da es einfach nur eine Zahl ist.


            Du Speicherst also einen timestamp in der DB:

            INSERT INTO table SET
            user = 'Neuer Benutzer',
            timestamp = UNIX_TIMESTAMP(); (Aktueller Zeitpunkt)



            Später kannst du damit machen was du willst, rechnen, in ein Datumsformat umwandeln und so weiter. Zb könntest du dir erstmal ausgeben lassen wann sich der letzte Benutzer registriert hat.


            list($letzte_registrierung) = mysql_fetch_row(mysql_query("SELECT timestamp FROM table ORDER BY timestamp DESC LIMIT 1"));

            Jetzt nur noch umwandeln in ein vernünftiges Datum

            echo date("m, j H:i:s", $letzte_registrierung);
            Tabellenlayouts sind out, Browsergames sind schei$$e und die Erde ist eine Scheibe.

            Kommentar


            • #7
              Und mit diesen Vergleichsoperatoren kannst du dann die verschiedenen Daten vergleichen.

              http://tut.php-q.net/vergleich.html

              Kommentar


              • #8
                Allerdings kannst du ein Datum des MySQL-DATE-Formats (YYYY-MM-DD) in PHP auch vergleichen.

                Kommentar


                • #9
                  Aber nur weil php so nett ist und versucht strings im zusammenhang mit operatoren als zahlen zu interpretieren.
                  Und das ist alles andere als 'sauber'.
                  Abgesehen von 'human readable' sehe ich keinen Grund ein Mysql Datumsformat zu benutzen.
                  Tabellenlayouts sind out, Browsergames sind schei$$e und die Erde ist eine Scheibe.

                  Kommentar


                  • #10
                    Zitat von Ricochet
                    Abgesehen von 'human readable' sehe ich keinen Grund ein Mysql Datumsformat zu benutzen.
                    Ich schon, allein aus dem Grund da es immer noch Leute gibt, welche vor 1970 geboren wurden.

                    Kommentar


                    • #11
                      Ein Argument für die Verwendung von DATETIME ist zum Beispiel, dass du wesentlich größere Datumsbereiche abdecken kannst.
                      Ein anderer Grund, DATETIME zu benutzen, ist, dass die Verarbeitung einer DATETIME-Spalte mit den Datumsfunktionen von MySQL wesentlich einfacher ist als bei der Verwendung von UNIX-Timestamps.
                      Bei Daten, bei denen es eh nur auf das Datum oder nur die Zeit ankommt, ist ein UNIX-Timestamp eh Unsinn. Hierfür gibt es DATE, TIME oder YEAR (je nachdem, was gespeichert werden soll).

                      Zitat von DiBo33
                      Ich schon, allein aus dem Grund da es immer noch Leute gibt, welche vor 1970 geboren wurden.
                      Für Geburtsdaten würde man aber eh eine DATE-Spalte nehmen, da die Uhrzeit normalerweise völlig uninteressant ist.

                      Kommentar


                      • #12
                        Zitat von xabbuh
                        Für Geburtsdaten würde man aber eh eine DATE-Spalte nehmen, da die Uhrzeit normalerweise völlig uninteressant ist.
                        Normalerweise schon, es sei denn du hast eine Horoskop-Datenbank

                        Kommentar


                        • #13
                          Zitat von Ricochet
                          Aber nur weil php so nett ist und versucht strings im zusammenhang mit operatoren als zahlen zu interpretieren.
                          Und das ist alles andere als 'sauber'.
                          Sehe ich eigentlich nicht so. Zumindest finde ich Stringvergleiche mit < > Operatoren nicht unsauber.

                          Kommentar


                          • #14
                            gut dass heisst wenn ich jetzt einfach einen timestamp hab der halt ganz viele sekunde symbolisiert die von der unix-anfangs-epoche vergangen sind mit den sekunden für heute vergleiche und wenn der timestamp dann kleiner ist dann wird der datensatz gelöscht
                            ok ich versuchs mal =)
                            danke

                            Kommentar


                            • #15
                              Zitat von Ricochet
                              Abgesehen von 'human readable' sehe ich keinen Grund ein Mysql Datumsformat zu benutzen.
                              Und, dass dir dann alle Datums- und Zeitfunktionen von MySQL nicht zur Verfügung stehen.
                              Vernüntiger ist ja wohl, eines der MySQL-Datumsformate zu benutzen, und wenn dann unbedingt ein Timestamp benötigt wird,
                              diesen mit der entsprechenden Funktion aus der DB zu holen.
                              Für das anfangs erwähnte Problem ist das aber gar nicht nötig, da MySQL ja die Funktionen NOW() oder CURDATE() kennt. Also z.B.
                              Code:
                              DELETE FROM tabelle
                              WHERE datum < CURDATE();
                              Gruss
                              L

                              Kommentar

                              Lädt...
                              X