Michael K.: Zeitraum in Monaten berechnen.

Hallo,

ich versuche einen Zeitraum in Monaten zu ermitteln, das klappt nicht so ganz zufriedenstellend. So bekomme ich etwa fuer den Zeitraum von 2009-03-29 bis 2009-06-28 als Ergebnis 4 Monate und nicht wie gewuenscht 3 Monate. Problem ist, es sollen auch Zeitraeume groesser als 12 Monate berechnet in die absolute Monatszahl umgerechnet werden. Kann mir jemand einen Tipp geben?

  
monthsBetween: function (thisDate, thatDate) {  
// thisDate ist Date Object fuer Beginn, thatDate fuer Ende des Zeitraums  
        if (thisDate > thatDate) {  
            return xbrladdon.string.monthsBetween(thatDate, thisDate);  
        }  
        var number = 0;  
        if (thatDate.getFullYear() > thisDate.getFullYear()) {  
            number = number + (thatDate.getFullYear() - thisDate.getFullYear() - 1) * 12;  
        } else {  
            return thatDate.getMonth() - thisDate.getMonth();  
        }  
        if (thatDate.getMonth() > thisDate.getMonth()) {  
            number = number + 12 + thatDate.getMonth() - thisDate.getMonth();  
        } else {  
            number = number + (12 - thisDate.getMonth()) + thatDate.getMonth();  
        }  
        return number;  
    },  
  

Dankbar fuer Loesungsvorschlaege,
Gruss Michael

  1. Hi,

    ich versuche einen Zeitraum in Monaten zu ermitteln, das klappt nicht so ganz zufriedenstellend. So bekomme ich etwa fuer den Zeitraum von 2009-03-29 bis 2009-06-28 als Ergebnis 4 Monate und nicht wie gewuenscht 3 Monate.

    Nicht nachvollziehbar - dein Code gibt mir 3 als Ergebnis aus.

    2009 fand aber die Umstellung auf Sommerzeit am 29.3. statt - also hast du vermutlich ein Problem mit der Zeitzone, in der du das ganze berechnest.

    Problem ist, es sollen auch Zeitraeume groesser als 12 Monate berechnet in die absolute Monatszahl umgerechnet werden. Kann mir jemand einen Tipp geben?

    Na ja, für jedes volle Jahr 12 Monate zu addieren, das hast du doch hier schon umgesetzt:

    if (thatDate.getFullYear() > thisDate.getFullYear()) {

    number = number + (thatDate.getFullYear() - thisDate.getFullYear() - 1) * 12;
            } else {
                return thatDate.getMonth() - thisDate.getMonth();
            }

      
    Ist das return dort Absicht?  
      
    MfG ChrisB  
      
    
    -- 
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    
  2. Hallo,

    ich versuche einen Zeitraum in Monaten zu ermitteln, das klappt nicht so ganz zufriedenstellend. So bekomme ich etwa fuer den Zeitraum von 2009-03-29 bis 2009-06-28 als Ergebnis 4 Monate und nicht wie gewuenscht 3 Monate.

    also musst Du auch die Tage berücksichtigen.

    monthsBetween: function (thisDate, thatDate) {
    // thisDate ist Date Object fuer Beginn, thatDate fuer Ende des Zeitraums

      
    Und warum benennst Du die Variablen nicht entsprechend?  
    thisDate und thatDate sind viel zu leicht zu verwechseln,  
    das heißt ungünstig gewählte Bezeichner.  
      
    ~~~javascript
      
    // [...] Code gekürzt, der weder Kommentare enthält noch  
    //       die jeweiligen Monatstage berücksichtigt.  
    
    > 
    
    

    Freundliche Grüße

    Vinzenz

    1. Hallo Ingrid,

      ich versuche einen Zeitraum in Monaten zu ermitteln, das klappt nicht so ganz zufriedenstellend. So bekomme ich etwa fuer den Zeitraum von 2009-03-29 bis 2009-06-28 als Ergebnis 4 Monate und nicht wie gewuenscht 3 Monate.

      also musst Du auch die Tage berücksichtigen.

      Nein, nach dem Beispiel nicht. Aber wieso sollte der Zeitraum vom 31.12.2009 bis zum 01.01.2010 ein Monat sein? Genauere Definition bitte.

      Freundliche Grüße

      Vinzenz