Ankündigung

Einklappen
Keine Ankündigung bisher.

Datum aus "String" ermitteln

Einklappen

Neue Werbung 2019

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

  • Datum aus "String" ermitteln

    Hallo Leute, ich habe ein Problem...

    Ich habe in einer Datenbank (MySQL) ein Feld, in dem Datumsangaben in einem ziemlich "miesen" Format vorliegen, nämlich als String.

    Kurz: Der 3. August 2007 z.B. liegt im String-Format 20070803 vor.
    Nun meine Frage: Kann ich an Hand dieser Daten ermitteln, wieviele Tage seit dem (bis zum heutigen Tag) vergangen sind?
    Ich weiß halt nicht ob es hierfür eine spezielle date-Funktion gibt, oder ob ich den String, z.B. mit substr, in seine einzelnen Elemente, also YYYY MM DD zerlegen muss?

  • #2
    Zerlegen, mit strtotime als unix timestamp, dann differenz berechnen

    Kommentar


    • #3
      Ok.
      Habe jetzt folgendes gemacht:

      PHP-Code:
      $meindatum "20070105";
      $timestamp strtotime($meindatum);
      $ausgabe date('d.m.Y'$timestamp);
      echo 
      $ausgabe
      Damit habe ich den String schon mal "zerlegt".
      Allerdings habe ich leider noch immer keine Idee, wie ich Differenz zum heutigen Tag errechnen kann. Hat jemand bitte einen Tip?

      Kommentar


      • #4
        Ausgehend von $timestamp kannst Du bspw. strtotime () verwenden. Oder $timestamp von time () subtrahieren.

        Kommentar


        • #5
          Zitat von Timer Beitrag anzeigen
          Ok.
          Habe jetzt folgendes gemacht:

          PHP-Code:
          $meindatum "20070105";
          $timestamp strtotime($meindatum);
          $ausgabe date('d.m.Y'$timestamp);
          echo 
          $ausgabe
          Damit habe ich den String schon mal "zerlegt".
          Allerdings habe ich leider noch immer keine Idee, wie ich Differenz zum heutigen Tag errechnen kann. Hat jemand bitte einen Tip?
          Du hättest dir die restlichen Zeitbezogenen PHP-Funktionen anschauen müssen
          strToTime() wandelt dein Datum in einen Unix-Timestamp um. Mit time() bekommst du den aktuellen Timestamp. Die Differenz der beiden ist also die Differenz zum heutigen Tag in Sekunden. Das musste halt nun nur noch in Stunden/Tage ... umrechnen

          Kommentar


          • #6
            Die Differenz der beiden ist also die Differenz zum heutigen Tag in Sekunden. Das musste halt nun nur noch in Stunden/Tage ... umrechnen
            Ok, aber werden bei dieser Methode denn auch Schaltjahre registriert und in die Berechnung mit einbezogen?

            Kommentar


            • #7
              Timestamps sind gezählte Minuten Seit Zeit X. Schaltjahre werden erst bei Datumsangaben TT.MM.JJ ... relevant und da ist die date () Funktion recht fit in Sachen Kalenderspezifika. Die kurze Antwort lautet: ja.

              Kommentar


              • #8
                Zitat von Timer Beitrag anzeigen
                Ok, aber werden bei dieser Methode denn auch Schaltjahre registriert und in die Berechnung mit einbezogen?
                na klar, die schaltjahre sind in dem fall ja total egal.
                der unix-timestamp bezeichnet die anzahl sekunden seit dem 1.1.1970 00:00 - wieviele schaltjahre oder auch nicht da dazwischenliegen ist ja total egal (natürlich werden die beim timestamp miteinbezogen). wenn du 86400 sekunden differenz hast ist das ein tag differenz - schaltjahr hin oder her

                PS: prinzipiell beachtet php aber schaltjahre und sogar sommerzeiten und alles. wenn du in einem schaltjahr am 28. februar einen tag draufrechnest kriegste natürlich den 29. feburar zurück

                Kommentar


                • #9
                  Natürlich Sekunden. *imBodenversink* Peinlich.

                  Kommentar


                  • #10
                    Zitat von nikosch Beitrag anzeigen
                    Natürlich Sekunden. *imBodenversink* Peinlich.
                    tztz

                    nochmal zum thread: prinzipiell lohnt es sich zeitangaben immer als unix-timestamp zu speichern. da spart man sich umrechnerei wenn man irgendwann mal seine datumanzeigen ändert oder sonstwas. aus einem unix-timestamp lässt sich nämlich prinzipiell über date() jedes beliebige datums/zeitformat machen und man kann damit eben auch besonders gut rechnen.

                    mfg

                    Kommentar


                    • #11
                      Zitat von Timer Beitrag anzeigen
                      Allerdings habe ich leider noch immer keine Idee, wie ich Differenz zum heutigen Tag errechnen kann. Hat jemand bitte einen Tip?
                      PHP-Code:
                      <?php
                      $meindatum 
                      "20070105";
                      $timestamp strtotime($meindatum);
                      $now=time();
                      $time=$timstamp $now;
                      $time=$time/60;
                      $time=$time/60;
                      $time=$time/24;
                      $stunden=$time%24;
                      $tage=round($time,0);

                      echo 
                      "Die Different betr&auml;gt $tage Tage und $stunden Stunden";
                      ?>
                      Noch nicht getestet

                      Kommentar


                      • #12
                        Muss das Feld in der Datenbank denn ein varchar/text/blob bleiben?
                        Wenn das Format zur Zeit yyyymmdd ist, kannst Du das Feld bei Bedarf immer noch umwandeln, ohne die Daten zu verlieren.

                        Code:
                        CREATE TABLE `beispiel` (
                          `id` tinyint(3) unsigned NOT NULL auto_increment,
                          `xyz` varchar(16) NOT NULL,
                          PRIMARY KEY  (`id`)
                        );
                        INSERT INTO beispiel (xyz) VALUES ('20070803'), ('20090105')
                        Wenn man das Feld xyz in DATE umwandeln lässt
                        Code:
                        ALTER TABLE `beispiel` CHANGE `xyz` `xyz` DATE NOT NULL
                        ergibt die Abfrage
                        Code:
                        SELECT xyz - Interval 3 day FROM beispiel
                        2007-07-31
                        2009-01-02
                        Die Werte wurden also "richtig" von MySQL nach DATE konvertiert.

                        Kommentar

                        Lädt...
                        X