Differenz zwischen zwei Date-Objekten berechnen in Monaten
Maxi
- javascript
0 Felix Riesterer0 Maxi0 Felix Riesterer0 Maxi
0 Der Martin0 Maxi
0 ChrisB
Hallo,
ich habe zwei Date-Objekte und möchte berechnen, wie groß deren Differenz in Monaten ist. Ausgangstag ist immer der 1. eines Monats, also z.B. 01.01.2011 und 01.03.2011. Die Differenz ist dann 2 Monate (Januar und Februar).
Kann ich das irgendwie direkt über die Date-Objekte berechnen? Oder muss ich mir Monat und Jahr holen und dann umständlich mit if-Abfragen rechnen?
Danke und Grüße, Maxi
Liebe(r) Maxi,
Du erzeugst einfach ein neues Date-Objekt, welches Du mit der Anzahl Millisekunden aus der Differenz der beiden vorhandenen Date-Objekte initialisierst. Dann kannst Du (beginnend mit dem 01.01.1970) die Anzahl Monate errechnen.
Folgender Code ist ungetestet:
function monate(alt, neu) {
var d = new Date(neu.getTime() - alt.getTime());
return d.getMonth() + 12 * (d.getFullYear() - 1970);
}
Liebe Grüße,
Felix Riesterer.
Lieder Felix,
danke für die schnelle Antwort.
Leider funktioniert das nicht.
Folgender Code ist ungetestet:
function monate(alt, neu) {
var d = new Date(neu.getTime() - alt.getTime());
return d.getMonth() + 12 * (d.getFullYear() - 1970);
}
>
Beim Aufruf von
alt = new Date(1, 1,2010);
neu = new Date(1, 1, 2011);
alert(monate(alt, neu));
ergibt die Differenz 0, der 01.01.2011 und der 01.11.2010 ergibt -9.
Nichts desto trotz, danke!
Hat vielleicht noch jmd. anders eine gute Idee?
Danke und Grüße, DIE Maxi ;)
Liebe Maxi,
Leider funktioniert das nicht.
"funktioniert nicht" funktioniert nicht.
alt = new Date(1, 1,2010);
neu = new Date(1, 1, 2011);
Vergleiche: http://de.selfhtml.org/javascript/objekte/date.htm#allgemeines
Liebe Grüße,
Felix Riesterer.
Lieber Felix,
Vergleiche: http://de.selfhtml.org/javascript/objekte/date.htm#allgemeines
oh oh, das ist mir aber peinlich. ;) So funktioniert es dann doch - aber die Version die mir weiter oben gepostet wurde gefällt mir ein Stück besser, da einfacher (bzw. kürzer).
Nichts desto trotz, vielen Dank für die super schnelle Hilfe!
Viele Grüße und ein schönes Wochenende,
Maxi
Hallo,
Lieder Felix
ob er auch singt, weiß ich nicht ... ;-)
Leider funktioniert das nicht.
Liegt der Fehler nicht vielleicht bei dir?
alt = new Date(1, 1, 2010);
neu = new Date(1, 1, 2011);
Diese beiden nicht normalisierten Datumsangaben unterscheiden sich genau um einen Tag, es handelt sich um den 2010. Februar des Jahres 1 und den 2011. Februar des Jahres 1. Javascript normalisiert das intern automatisch auf den 03. und 04. August 1906. Warum 1906?? Anscheinend beginnt die Javascript-Zählung mit dem 01.01.1900 und nicht erst mit 1970, wie in SELFHTML nachzulesen ist.
Beachte die Reihenfolge der Parameter beim Konstruktorausfruf des Date-Objekts, und beachte ferner, dass die Monate hier von 0..11 zählen.
Ciao,
Martin
Lieber Martin (bei dir gehe ich mal nicht davon aus, dass du singen kannst ;)),
Lieder Felix
ob er auch singt, weiß ich nicht ... ;-)
davon bin ich einfach mal ausgegangen :D
Beachte die Reihenfolge der Parameter beim Konstruktorausfruf des Date-Objekts, und beachte ferner, dass die Monate hier von 0..11 zählen.
Das ist peinlich. Da bin ich wohl zu geschädigt von anderen Sprachen. Danke für den Hinweis!
Viele Grüße und ein schönes Wochenende,
Maxi
Hi,
ich habe zwei Date-Objekte und möchte berechnen, wie groß deren Differenz in Monaten ist. Ausgangstag ist immer der 1. eines Monats, also z.B. 01.01.2011 und 01.03.2011. Die Differenz ist dann 2 Monate (Januar und Februar).
Kann ich das irgendwie direkt über die Date-Objekte berechnen?
Eher schlecht - weil das nicht deiner Definition von Monaten folgt.
Oder muss ich mir Monat und Jahr holen und dann umständlich mit if-Abfragen rechnen?
Wieso umständlich, das ist doch ziemlich simpel.
MfG ChrisB
Hallo,
Wieso umständlich, das ist doch ziemlich simpel.
ja, eigentlich schon.
- Differenz der Jahreszahlen bilden, und wenn Startmonat > Endmonat ist, eins davon abziehen
- mit zwölf multiplizieren
- Differenz von Startmonat minus Endmonat bilden, 12 draufaddieren, Modulo 12 nehmen, und das dann noch auf die vorher ermittelte Zahl draufaddieren
Wieso umständlich mit Fallunterscheidungen?
(Jahr1*12 + Monat1) - (Jahr2*12 + Monat2)
Damit ist sogar egal, ob man den Monat von 0..11 oder von 1..12 zählt.
Kleiner Schönheitsfehler: Damit liegen der 31.03.2011 und der 01.04.2011 einen Monat auseinander. Ob das in diesem speziellen Fall so gewünscht ist, geht aber aus der ursprünglichen Aufgabenstellung nicht hervor.
Ciao,
Martin
Hi,
Kleiner Schönheitsfehler: Damit liegen der 31.03.2011 und der 01.04.2011 einen Monat auseinander. Ob das in diesem speziellen Fall so gewünscht ist, geht aber aus der ursprünglichen Aufgabenstellung nicht hervor.
Eigentlich geht das schon deutlich hervor: "Ausgangstag ist immer der 1. eines Monats,"
cu,
Andreas
Lieber Martin,
Wieso umständlich mit Fallunterscheidungen?
(Jahr1*12 + Monat1) - (Jahr2*12 + Monat2)
wow, das ist ja super kurz, danke!
Kleiner Schönheitsfehler: Damit liegen der 31.03.2011 und der 01.04.2011 einen Monat auseinander. Ob das in diesem speziellen Fall so gewünscht ist, geht aber aus der ursprünglichen Aufgabenstellung nicht hervor.
Wie bereits ein Antwortender geschrieben hat schreibe ich ja immer, dass es am 01. eines Monats beginnt, von daher ist das so perfekt.
Vielen Dank, viele Grüße und ein schönes Wochenende,
Maxi