Zeitraum in Monaten berechnen.
Michael K.
- javascript
0 ChrisB0 Vinzenz Mai
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
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?
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
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