Abstand zwischen 2 Daten berechnen, Fehler

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

  • #16
    Fehlermeldung lesen ist schon schwer!

    Guck dir doch einfach mal den 1. Parameter an und verzell uns, was drin steht.

    Kommentar


    • #17
      Is mir jetzt auch egal, hab die Funktion geblickt und die behebt mein Problem auch nicht, da sie automatisch davon ausgeht das jeder Monat 30 Tage hat und genau das will ich vermeiden.

      Kommentar


      • #18
        Die Frage wie man die Differenz in Monaten berechnet, geht so, wie man von Hand gewöhnliche Zahlen stellenweise subtrahiert.

        Also Y,M,D = y2,m2,d2 - y1,m1,d1:

        falls d2-d1>=0: D = d2-d1, sonst d2=d2+mlength(m2-1,y2) bzw. falls m2=1: 31)), m2=m2-1,D=d2-d1,
        falls m2-m1>=0: M=m2-m1, sonst m2=m2+12, y2=y2-1, M=m2-m1.
        Y=y2-y1.

        Etwa so.

        Kommentar


        • #19
          Falls Jemand wirklich nur die Monate haben will und nicht Jahre, Monate, Tage:
          M = y2,m2,d2-y1,m1,d1:

          M2 = y2*12+m2; M1=y1*12+m1;
          falls d2<d1 M2=M2-1;
          M=M2-M1!

          oder als verquetschte Formel (weil false/0, true/1).
          M = (y2-y1)*12 + m2-m1 - (boolean)(d2<d1);

          oder einfach so:
          M = (y2-y1)*12 + m2-m1 - (d2<d1);
          Zuletzt geändert von vierteln; 05.05.2006, 00:37.

          Kommentar


          • #20
            OP:
            2006-05-04 10:33:29

            2006-05-01 10:32:51

            Das gibt nach Adam PHP genau 2006-2006, oder den 1. Januar 1970.

            Kommentar


            • #21
              Hab mir Gestern Abend ne Funktion dafür gebastelt, und die funktioniert:

              PHP-Code:
              function getmonths($date1,$date2)  //date1 and date2 as Timestamp!
              {
                
              $year1=(int)date('Y',$date1);
                
              $year2=(int)date('Y',$date2);
                
              $month1=(int)date('n',$date1);
                
              $month2=(int)date('n',$date2);
                if (
              $year1==$year2)
                {
                 
              $result=($month1-$month2);
                }
                else
                {
                 
              $years=($year1-$year2);
                 if (
              $years=1)
                 {
                  
              $result=(12-$month2+$month1);
                 }
                 else
                 {
                  
              $years-=1;
                  
              $result=(($years*12)+(12-$month2+$month1));
                 }
                }
                return 
              $result

              Kommentar


              • #22
                if ($years=1)
                *lol*

                Kommentar


                • #23
                  Schon verbessert *g*
                  Bin halt total von Delphi beeinflusst....

                  Kommentar


                  • #24
                    Ich denke dass Du dir die Fallunterscheidungen für jahr1==jahr2 und jahr1==jahr2+1 sparen kannst.
                    und direkt (jahr1-jahr2)*12 + month1-month2 schreiben.

                    Rechnerisch gibt es auch alleweil dasselbe.

                    Einzigstes verbleibendes Problem, dass zB. 1. Februar - 31. Januar auch schon 1 Monat gibt, ebenso wie 28. Februar - 31. Januar und 28. Februar - 1. Januar. wenn Du das so haben möchtest....

                    Kommentar


                    • #25
                      Des macht nichts. Ist sogar beabsichtigt.

                      Kommentar

                      Lädt...
                      X