date-increment

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

  • date-increment

    Hallo zusammen,

    ich wusste gerade nicht 100%ig, ob ich den Post in Script-Gesuche oder hier hinein poste, hab ihn aber mal hierhin getan.

    Mein Problem:

    Ich habe einen Timestamp und möchte nun möchte ich dort einen (zwei/drei/...n) Monate draufaddieren.

    Ich habe es mittels einem 'month +1' mit strtotime und mit der DateTime-Klasse versucht.

    Nur berücksichtigt diese Funktion / Klasse nicht, dass es Monate mit 30 oder 31 oder auch 28 Tagen gibt. Wenn ich also den 31.1. um einen Monat erhöhe bekomme ich nicht den 28/29.2. (den ich gerne hätte) sondern den 2./3. 3.

    Nunja, ich könnte mir natürlich selber eine Funktion schreiben, da ich mir aber vorgenommen habe, das Rad (nicht mehr) andauernd neu zu erfinden wollte ich hier mal fragen, ob nicht jemand eine Funktion / eine Klasse kennt, die dies vernünftig handeln kann.
    signed oder unsigned... das ist hier die Frage

  • #2
    was ergibt:

    echo date('Y-m-d', strtotime('+1 month'));

    bei dir?

    Kommentar


    • #3
      MySQL beherrscht das ausgezeichnet. Dazu musst du zwar mit MySQL verbunden sein, eine DB muss aber nicht selektiert sein:
      PHP-Code:
      $sql "SELECT date_add( '2007-01-31', INTERVAL 1 MONTH )" ;
      $res mysql_query($sql);
      list(
      $datum) = mysql_fetch_row($res);
      echo 
      $datum
      Gruss
      H2O

      Kommentar


      • #4
        genau das Funktioniert ja nicht


        Mein Testscript, mit dem ich schon die php-eigenen Zeitfunktionen ausprobiert habe:

        PHP-Code:
        define('TIME'1201734000); // Der 31.01.08

        echo 'Aus '.date('Y-m-d'TIME);

        echo 
        ' wird '.date('Y-m-d'strtotime(date('Y-m-d',TIME)."+ 1 month"));

        echo 
        '<br /> Nun kommt der Versuch mit der DateTime-Klasse <br />';

        $oDate = new DateTime(date('Y-m-d',TIME));

        echo 
        'Aus '.$oDate->format('Y-m-d');

        $oDate->modify('+1 month');

        echo 
        ' wird '.$oDate->format('Y-m-d'); 

        ausgabe:

        Code:
        Aus 2008-01-31 wird 2008-03-02
        Nun kommt der Versuch mit der DateTime-Klasse
        Aus 2008-01-31 wird 2008-03-02


        @H2O: Ja, aber ich möchte nicht auf MySql zurückgreifen, da ich in einer Schleife andauernd das Datum erhöhen muss und da will ich nicht immer eine SQL-Abfrage machen.
        Zuletzt geändert von case; 20.03.2008, 15:01.
        signed oder unsigned... das ist hier die Frage

        Kommentar


        • #5
          Was erwartest du denn, das ist doch korrekt so. Den 31. Februar gibt es nicht daher wird, zumindest in einem Schaltjahr, der 2. März ausgegben. In einem Nicht-Schaltjahr müsste es dementsprechend der 3. März sein.
          Welches Datum hättest du denn gerne? (bezogen auf den 31.01.08 + 1 Monat)
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            Wie ich im 1. Post geschrieben hatte hätte ich dort dann gerne den 28. bzw. 29. 02.

            Ich habe gerade noch etwas länger nach fertigen Funktionen gesucht, die mir das so machen würde, werde mich jetzt wohl aber doch mal dran setzten, mir selber eine zu schreiben, da es das wohl komischerweise nicht gibt. (was ich sehr erstaunlich finde)
            signed oder unsigned... das ist hier die Frage

            Kommentar


            • #7
              Die folgende Funktion macht in etwa das gleiche, wie der genannte SQL-Code:
              PHP-Code:
              function add_month($datum){
              /*
              **    Funtion:        add_month
              **                    Addiert einen Monat zu einem gegebnen Datum.
              **                    Fällt das Datum in den übernächsten Monat, wird 
              **                    der letzte Tag des Monats vorher genommen
              **
              **    Parameter:
              **        $datum        timestamp (Ausgangsdatum)
              **
              **    Return Code:    String: Datum im Format dd.mm.yyyy
              **
              */
                  
              list($d$m$y) = explode('|'date('d|m|Y'$datum));
                  
              $datn date('d.m.Y'strtotime("$y-$m-$d + 1 month"));
                  list(
              $dn$mn$yn) = explode('.'$datn);
                  if ((
              $m 1) < $mn){
                      
              $mn --;
                      
              $last date('t'mktime(000$mn1$y));
                      
              $datn sprintf("%02d.%02d.%04d"$last$mn$yn);
                  }
                  return 
              $datn;

              Gruss
              H2O

              Kommentar


              • #8
                ah, vielen Dank
                signed oder unsigned... das ist hier die Frage

                Kommentar

                Lädt...
                X