sinnvoll mit Datum rechnen

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

  • sinnvoll mit Datum rechnen

    Hallo,

    wie rechnet man denn sinnvoll mit einem Datum?

    Z.B. möchte ich zu einem Datum (im Format yyyy-mm-dd) einen Tag hinzurechnen. Mir fallen zwei Möglichkeiten ein, die ich aber beide nicht besonders toll finde:

    1. Das Datum in Tag, Monat und Jahr auseinanderschneiden, zum Tag eins hinzuzählen und dann wieder zusammensetzen. Allerdings muß man dann selbst prüfen, ob man eine Monats- oder Jahresgrenze überschritten hat. Extrem umständlich...

    2. Datum in einen UNIX-Timestamp umwandeln und 24 * 60 * 60 Sekunden dazuaddieren. Und jetzt wieder zurück ins ursprüngliche Datumsformat. Das funktioniert aber nur in der UNIX-Epoche und ich brauche es für Geburtstage von "alten" Leuten...

    Es muß doch in PHP eine sinnvolleren Weg geben!

    Oliver.

  • #2
    wenn das datum schon aus ner DB kommt, kannst du das auch da berechnen lassen.

    mit INTERVAL gehts.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Das Datum kommt nur ursprünglich aus der Datenbank. Eigentlich möchte ich eine Funktion zu jedem Tag in einem Zeitraum ausführen. So etwas wie:

      PHP-Code:
      $datum $datum_a;
      while (
      $datum <= $datum_b) { // das funktioniert auch nicht
          
      funktionx($datum);
          
      // hier soll jetzt zum $datum ein Tag hinzugezählt werden

      Kommentar


      • #4
        mache es dann doch direkt in der DB

        das müsste dann glaube ich so aussehen.

        Code:
        SELECT DATE_ADD(datumsfeld, INTERVAL 1 DAY) FROM tabelle;
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          wenn nicht in der DB möglich dann benutze

          int mktime ( int Stunde, int Minute, int Sekunde, int Monat, int Tag, int Jahr [, int is_dst])
          Beantworte nie Threads mit mehr als 15 followups...
          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

          Kommentar


          • #6
            @Abraxax: Deinen Vorschlag verstehe ich nicht ganz: Wenn ich auf das ursprüngliche Datum genau einen Tag hinzufügen möchte ist das OK, aber ist das der richtige Ansatz für das hinzurechnen eines Tages in der oben beschriebenen while-Schleife?
            Die interval-Funktion der MySQL ist übrigends richtig gut. Eigentlich suche ich genau sowas in PHP!

            @MelloPie: Deinen Vorschlag verstehe ich auch nicht ganz: Habe ich dann nicht die Nachteile meiner zwei Vorschläge kombiniert (Datum nur in der UNIX-Epoche möglich und zerschneiden des Datums als String), ohne einen weiteren Nutzen davon zu haben? Vielleicht habe ich Dich einfach missverstanden.

            Oliver.

            Kommentar


            • #7
              Original geschrieben von oli-1
              Die interval-Funktion der MySQL ist übrigends richtig gut. Eigentlich suche ich genau sowas in PHP!
              in php geht das so nicht. da musst du umrechnen in unix-time und dann wieder zurückrechnen. ist aber quatsch.

              ich nehme an, dass alle deine daten aus der DB kommen. dann kannst du mit o.g. variante logischerweise alle datensätze gleichzeitig erhöhen.
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                @Abraxax: Das ich aus der Datenbank direkt den nächsten Tag auslesen kann, ist mir ja klar. Aber ich möchte doch nicht einmal um einen einzelnen Tag erhöhen, sondern pro while-Schleifendurchgang um jeweils einen Tag.

                Am liebsten wäre mir folgender Code, der aber in PHP leider nicht möglich ist (siehe Kommentare):

                PHP-Code:
                $datum_start = (date'1968-01-01'// Variablen vom Typ date gibt es in PHP nicht
                $datum_stop = (date'1968-06-03':

                $datum_aktuell $datum_start;
                while (
                $datum_aktuell <= $datum_stop) { // das funktioniert auch nicht. Hier werden zwei strings und keine Datums-Variablen verglichen.
                    
                funktionx($datum_aktuell);
                    
                $datum_aktuell $datum_aktuell 1 day;
                    
                // hier soll zum $datum_aktuell ein Tag hinzugezählt werden

                Dieser Code ist wie gesagt Quatsch, aber ich versuche mein Problem damit zu verdeutlichen.

                Kommentar


                • #9
                  du hast also ein start-datum und ein ende-datum.

                  nun willst du alle tage einzeln auflisten, wenn ich dich jetzt richtig verstanden habe.

                  also noch mal kurz zum mitschreiben ..

                  - beide datumsangaben in eine unix-zeit wandeln (strtotime() sollte helfen)

                  - in der schleife jewils um einen typ hochcounten

                  - usw.

                  bei der ausgabe musst du jedoch wieder umrechnen.
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    Aber ich kann doch keinen UNIX-Timestamp benutzen, da mein Datum nicht in der UNIX-Epoche liegt (vor 1970).

                    Oliver.

                    Kommentar


                    • #11
                      mhm. das ist natürlich schlecht ....

                      frage: brauchst du wirklich die datumsangaben komplett aufgelistet?
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        Hi !!

                        Interresantes Problem... Ich habs 'nur' mit PHP auch nicht geschaft. Aber im Zusammenspiel mit MySQL kann man es so machen:
                        PHP-Code:
                        <?
                        mysql_connect("localhost","user","passwort");

                        $datum_start = '1968-01-01';
                        $datum_stop  = '1968-06-03';

                        $akt_date = $datum_start;
                        while($akt_date != $datum_stop) {
                          $q = mysql_query("SELECT DATE_FORMAT(DATE_ADD('".$akt_date."', INTERVAL 1 DAY),'%Y-%m-%d');");
                          $akt_date = mysql_result($q,0);
                          echo $akt_date."<br>";
                        }
                        ?>
                        Wobei hier das erste Datum fehlt... Aber die Logik sollte klar sein.
                        Falls doch noch jemand weiss, wie man's direkt in PHP machen kann, wäre ich auch sehr interresiert.

                        Gruss
                        Jan
                        www.traum-projekt.com

                        Kommentar


                        • #13
                          coole sache das.

                          die idee kam mir gestern schon, hatte sie aber erst einmal verworfen, da man ja leider für jedes datum einen neue query machen muss.

                          bei einem jahr sind das ja schon 365 querys.... die performance könnte dann etwas leiden ....

                          aber ansonsten super ansatz.
                          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                          Kommentar

                          Lädt...
                          X