Sneap: Datum prüfen ob älter als....

Hallo Leute,
ich hab ein kleines Problem mit dem Prüfen von einem Datum.
Das Datum lese ich aus meiner DB aus in diesem Format:
1262543008

Ich würd jetzt gerne Prüfen ob dieses Datum älter ist als 5 Tage. Hab schon n bisel gegooglet und gelesen, aber leider hat mich nichts zum Ergebniss gebracht.
Wäre super wenn mir da jemand Helfen könnte.

Danke schon mal.

Mfg

  1. Das Datum lese ich aus meiner DB aus in diesem Format:
    1262543008

    timestamp? Vermutlich gibt es da eine DB-eigene Funktion.

    Ich würd jetzt gerne Prüfen ob dieses Datum älter ist als 5 Tage.

    Was heißt das genau? Mit der Beantwortung der Frage kommst Du dann vielleicht schon selber drauf.

    1. Das Datum lese ich aus meiner DB aus in diesem Format:
      1262543008

      timestamp? Vermutlich gibt es da eine DB-eigene Funktion.

      DB-eigene Funktion? Ich lese das Datum ja von dort aus oder versteh ich da gerade was flasch? Also müste ich das ganze doch dann in PHP realisieren oder?

      Ich würd jetzt gerne Prüfen ob dieses Datum älter ist als 5 Tage.

      Was heißt das genau? Mit der Beantwortung der Frage kommst Du dann vielleicht schon selber drauf.

      Ich hab da nur nen Ansatz und zwar:

        
      $day_new = 5;  
      $date_dif = time() - $row[5];  
        
      if ($date_dif > $day_new)  
      {  
        echo '5 Tage sind noch nicht um';  
      }  
      
      

      Nur wegen $day_new weiß ich nicht ganz wie ich die Zahl umrechne weil ich glaub 5 an der Stelle nach dem > ist nicht ganz richtig.

      1. DB-eigene Funktion? Ich lese das Datum ja von dort aus oder versteh ich da gerade was flasch? Also müste ich das ganze doch dann in PHP realisieren oder?

        Datenbanken bieten oft auch verschiedene Funktionen bei denen man gleich Differenzen, auch speziell von Datumsformaten, bilden kann, sowohl für den Rückgabewert als auch für die WHERE-Klausel. Was das angeht bin ich aber auch nicht sehr fit. Von mir aus können wir bei der Lösung mit php bleiben.

        $day_new = 5;
        $date_dif = time() - $row[5];

        if ($date_dif > $day_new)
        {
          echo '5 Tage sind noch nicht um';
        }

          
        Heißt das, Du willst beispielsweise 17 Uhr 57 wissen, ob der timestamp älter ist als 17 Uhr 57 vor fünf Tagen? 17 Uhr 58 vor fünf Tagen wäre dann nicht älter.  
          
        
        > Nur wegen $day\_new weiß ich nicht ganz wie ich die Zahl umrechne weil ich glaub 5 an der Stelle nach dem > ist nicht ganz richtig.  
          
        Wenn es ein timestamp ist, dann sind das Sekunden. Ob Du dann die 5 mit 60 \* 60 \* 24 multiplizieren kannst, hängt davon ab, ob es wirklich das ist was Du willst. Darum frage ich, Du mußt erst mal wissen was Du willst, dann mußt Du es formulieren können und dann kann man es auch in Code umsetzen.
        
        1. Heißt das, Du willst beispielsweise 17 Uhr 57 wissen, ob der timestamp älter ist als 17 Uhr 57 vor fünf Tagen? 17 Uhr 58 vor fünf Tagen wäre dann nicht älter.

          Nur wegen $day_new weiß ich nicht ganz wie ich die Zahl umrechne weil ich glaub 5 an der Stelle nach dem > ist nicht ganz richtig.

          Wenn es ein timestamp ist, dann sind das Sekunden. Ob Du dann die 5 mit 60 * 60 * 24 multiplizieren kannst, hängt davon ab, ob es wirklich das ist was Du willst. Darum frage ich, Du mußt erst mal wissen was Du willst, dann mußt Du es formulieren können und dann kann man es auch in Code umsetzen.

          Ja das formulieren ist leider nicht immer so leicht. Aber ich hab eine Lösung gefunden, wenn ich keinen Denkfehler drin habe:

            
          $day_new  = 5;  
          $date_old = strtotime(date("d.m.Y",$row[5])) ;  
          $date_now = strtotime(date("d.m.Y",time())) ;  
          $date_dif = $date_now - $date_old;  
          $date_dif = $date_dif / 86400;  
            
          if($day_new > $date_dif){  
           echo 'Der Eintrag ist noch keine '.$day_new.' Tage alt.';  
          }else{  
           echo 'Der Eintrag ist älter als '.$day_new.' Tage.';	  
          }  
          
          
          1. Hallo,

            $date_old = strtotime(date("d.m.Y",$row[5])) ;

            $date_now = strtotime(date("d.m.Y",time())) ;
            $date_dif = $date_now - $date_old;
            $date_dif = $date_dif / 86400;

              
            das ist aber von hinten durch die Brust ins Knie. Du wandelst die zwei Timestamp erst in einen Datums-String um, und den dann wieder in je einen Timestamp. Das ist Unsinn, oder?  
              
            Wenn dein Wert aus der DB, also hier row[5], tatsächlich ein Unix-Timestamp ist (und es deutet ja alles darauf hin), lässt sich das stark verknappen:  
              
            ~~~php
            $date_dif = time() - row[5];   // Differenz in Sekunden  
            $date_dif /= 86400;            // Differenz in Tagen
            

            So long,
             Martin

            --
            Auch mit eckigen Radios kann man Rundfunk hören.
            1. hi,

              das ist aber von hinten durch die Brust ins Knie. Du wandelst die zwei Timestamp erst in einen Datums-String um, und den dann wieder in je einen Timestamp. Das ist Unsinn, oder?

              Hmm, mal kurz nachgedacht...

              Wenn dein Wert aus der DB, also hier row[5], tatsächlich ein Unix-Timestamp ist (und es deutet ja alles darauf hin), lässt sich das stark verknappen:

              $date_dif = time() - row[5];   // Differenz in Sekunden

              $date_dif /= 86400;            // Differenz in Tagen

                
              Wobei time() keinen Bezug zu Locale hat, aber evntl. ist genau das ja auch unwichtig ;-)  
                
              Hotti
              
              -- 
              Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
              
              1. Ich hab da noch ne Frag und zwar würd ich gern in meine DB mein Datum als Timestamp eintrage.
                Ich habe so ein Datum hier:
                04-01-2010 12:30:46

                und möchte das es so in der DB eingetragen wird:
                1262604646

                Ich habs so versucht, nur leider ist das nicht richtig:

                  
                $sql = mysql_query("UPDATE ".$db_tabell." SET Titel='$_POST[Titel]',Size='$_POST[Size]',Beschreibung='$_POST[Beschr]',Link='$_POST[Link]',datum='UNIX_TIMESTAMP($_POST[Datum])' WHERE id=$_GET[id]");  
                
                
                1. hi,

                  Ich habe so ein Datum hier:
                  04-01-2010 12:30:46

                  und möchte das es so in der DB eingetragen wird:
                  1262604646

                  Ich habs so versucht, nur leider ist das nicht richtig:

                  Du suchst eine Funktion(*), die Dir aus der Datum/Zeitangabe, die auf jeden Fall von Locale abhängt (Stichworte; Sommerzeit, Zeitzone) einen Timestamp erzeugt, der von Locale unabhängig, bzw. auf den 1.1.1970 0 Uhr GMT bezogen ist.

                  Funktion(*): Entweder eine PHP-Funktion oder eine Funktion welche das DBMS zur Verfügung stellt. Evntl. ists jedoch besser angebracht, das DB-Design zu überarbeiten (Stichworte: s.o.) und ausschließlich Funktionen zu verwenden, die das DBMS bietet.

                  Das bedeutet auch, dass bereits beim Erheben der Daten alles erfasst wird, also nicht nur die Uhrzeit, sondern auch die Zeitzone.

                  Hotti

                  --
                  Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
                  1. Du suchst eine Funktion(*), die Dir aus der Datum/Zeitangabe, die auf jeden Fall von Locale abhängt (Stichworte; Sommerzeit, Zeitzone) einen Timestamp erzeugt, der von Locale unabhängig, bzw. auf den 1.1.1970 0 Uhr GMT bezogen ist.

                    Funktion(*): Entweder eine PHP-Funktion oder eine Funktion welche das DBMS zur Verfügung stellt. Evntl. ists jedoch besser angebracht, das DB-Design zu überarbeiten (Stichworte: s.o.) und ausschließlich Funktionen zu verwenden, die das DBMS bietet.

                    Das bedeutet auch, dass bereits beim Erheben der Daten alles erfasst wird, also nicht nur die Uhrzeit, sondern auch die Zeitzone.

                    Hotti

                    Ich erklär mal was ich vorhabe und zwar.
                    Ich lese die Timstamp aus der DB aus und wandel sie um so das ich sie lesen und bearbeiten kann. Habe ich diese bearbeitet soll diese wieder als Timstamp in die DB geschrieben werden. Das einzigste Problem ist halt was ich habe das ich nciht weiß wie ich das normale Datum in eine Timestamp umwandeln kann.

                    1. Edit:

                      Hab ne Lösung gefunden lasse nicht alles in ein input Feld schreiben sonder schreib jedes für sich in ein Feld. Dann das ganze nur noch mit mktime umwandeln und in die DB schreiben.

                      Fertig.

                        
                      $date_new = mktime($_POST['Datum_H'],$_POST['Datum_i'],$_POST['Datum_s'],$_POST['Datum_m'],$_POST['Datum_d'],$_POST['Datum_Y']);  
                      
                      

                      Mfg

                      Ps: Danke an alles fürs Helfen.

            2. Wenn dein Wert aus der DB, also hier row[5], tatsächlich ein Unix-Timestamp ist (und es deutet ja alles darauf hin), lässt sich das stark verknappen:

              $date_dif = time() - row[5];   // Differenz in Sekunden

              $date_dif /= 86400;            // Differenz in Tagen

              
              >   
              > So long,  
              >  Martin  
              >   
                
              Super kurz und knapp.  
              Besten Dank an alle.
              
            3. Hi,

              ich investiere im Nachhinein noch einen Dollar: ;-)

              $date_dif = time() - $row[5];   // Differenz in Sekunden

              ^

              $date_dif /= 86400;             // Differenz in Tagen

              Und ergänze noch den Hinweis: Die Umrechnung von Timestamps durch einfache Division kann überraschende Ergebnisse liefern, da es in diesem unserem Lande zwei Tage im Jahr gibt, die nicht 86400 Sekunden (24 Stunden) haben. Solange beide Datumswerte *wirklich* Unix-Timestamps und damit auf UTC bezogen sind, spielt das keine Rolle. Wenn aber einer der beiden Timestamps (oder gar beide) aus einer lokalen Zeitangabe mit DST-Einfluss berechnet wird, muss man das berücksichtigen. Die PHP-Standardfunktionen tun das AFAIK automatisch.

              Ciao,
               Martin

              --
              There are 10 types of people in the world: Those who understand the binary system, and those who don't.
            4. $date_old = strtotime(date("d.m.Y",$row[5])) ;

              $date_now = strtotime(date("d.m.Y",time())) ;
              $date_dif = $date_now - $date_old;
              $date_dif = $date_dif / 86400;

              
              >   
              > das ist aber von hinten durch die Brust ins Knie. Du wandelst die zwei Timestamp erst in einen Datums-String um, und den dann wieder in je einen Timestamp. Das ist Unsinn, oder?  
                
              Kommt darauf an was man will, mit der Methode erzeugt man timestamps von "ganzen" (Kalender-) Tagen, also geht es nicht mehr um die beispielhaften 17 Uhr 58.
              
          2. Ja das formulieren ist leider nicht immer so leicht.

            Aber Du müßtest doch wenigstens sagen können und für die Lösung sagen müssen, ob es um das Datum geht oder um (Zeit-) Tage, sprich von x Uhr y bis x Uhr y vor fünf Tagen*. Ob Zeitumstellungen oder Schaltsekunden zu berücksichtigen sind, würden wir Dir zur Not noch aus der Nase ziehen.

            * Deine Lösung und die "super kurz und knappe" unterscheiden sich nicht unerheblich (etwa um bis zu 24 Stunden).