Monate addieren
Bernd
- javascript
1 ChrisB0 Bernd0 dave0 Gunnar Bittersmann0 Bernd0 Vinzenz Mai0 Struppi
0 Vinzenz Mai
0 dave0 Vinzenz Mai
Hallo zusammen,
ich habe eine Problem mit der Addition von Monaten mit Date();
Gegebenes Datum soll um 6 Monate erhöht werden. Das funktioniert z.B. beim Datum 31.07.2010. Da macht er brav den 31.01.2011 draus. Beim 31.10.2010 macht er dann den 01.05.2011 draus. Addiert also einfach einen Tag. Woran liegts?
var datumjetzt = "2010-10-31";
var arrDate = datumjetzt.split("-");
var datum = new Date(parseInt(arrDate[0],10), parseInt(arrDate[1],10)-1, parseInt(arrDate[2],10), 12, 0, 0);
datum.setMonth(datum.getMonth() + 6);
alert(datum);
Hi,
Gegebenes Datum soll um 6 Monate erhöht werden. Das funktioniert z.B. beim Datum 31.07.2010. Da macht er brav den 31.01.2011 draus. Beim 31.10.2010 macht er dann den 01.05.2011 draus. Addiert also einfach einen Tag. Woran liegts?
Daran, dass der April keine 31 Tage hat.
MfG ChrisB
OK, aber wie kann ich zu einen Datum z.B. 6 Monate addieren und das korrekte ausgeben lassen?
Hi,
vorzugsweise indem du Monate addierst :)
datum.setMonth( datum.getMonth() + 6 );
~dave
@@dave:
nuqneH
vorzugsweise indem du Monate addierst :)
datum.setMonth( datum.getMonth() + 6 );
Bist du sicher, dass du damit nicht in ca. der Hälfte der Fälle 6 Monate subtrahierst?
Qapla'
Jetzt versteh ich gar nichts mehr?!
Ist jetzt bei datum.setMonth( datum.getMonth() + 6 );
31.12.2010 -> 30.06.2011
oder
31.12.2010 -> 31.06.2011 was zu einer Korrektur seitens JS führt.
Wie kann ich das korrekt berechnen?
Wie kann ich das korrekt berechnen?
Die Frage ist, was ist korrekt deiner Meinung nach?
Struppi.
Wie kann ich das korrekt berechnen?
Die Frage ist, was ist korrekt deiner Meinung nach?
Struppi.
OK, hab es verstanden. Danke für eure tiefgreifend Hilfe.
Sorry, dass ich hier was gefragt habe....
Viel Erfolg weiterhin!
OK, hab es verstanden. Danke für eure tiefgreifend Hilfe.
Sorry, dass ich hier was gefragt habe....
Willst du uns veräppeln?
Deine Frage wurde bantwortet, warum du jetzt noch ein Problem hast, wird aus deiner Fragestellung nicht deutlich, aus welchem Grund reagierst du jetzt so?
Struppi.
Hallo Gunnar,
vorzugsweise indem du Monate addierst :)
datum.setMonth( datum.getMonth() + 6 );
Bist du sicher, dass du damit nicht in ca. der Hälfte der Fälle 6 Monate subtrahierst?
mir scheint die Darstellung in http://de.selfhtml.org/javascript/objekte/date.htm@title=SELFHTML veraltet - und die in Mozillas Doku auch. Firefox hält sich (wie Opera 10.63 und IE8, die ich auf die Schnelle getestet habe) an das, was in der ECMAScript-Spezifikation (Version 5), ab Seite 174 drin steht:
Das Datum wird aus den Einzelangaben in einen Datumswert umgerechnet und daraus das resultierende Datum ermittelt.
Freundliche Grüße
Vinzenz
mir scheint die Darstellung in http://de.selfhtml.org/javascript/objekte/date.htm@title=SELFHTML veraltet - und die in Mozillas Doku auch. Firefox hält sich (wie Opera 10.63 und IE8, die ich auf die Schnelle getestet habe) an das, was in der ECMAScript-Spezifikation (Version 5), ab Seite 174 drin steht:
Das Datum wird aus den Einzelangaben in einen Datumswert umgerechnet und daraus das resultierende Datum ermittelt.
Die Angaben sagen wohl nur aus, welcher Wert innerhalb des gültigen Bereichs liegen, aber in der Beschreibung zur Methode wird auch ausgesagt, was passiert, wenn es ausserhalb ist. Das war auch, meines Wissens nach, schon immer so.
Struppi.
Hallo Struppi,
danke für Deinen Hinweis.
Die Angaben sagen wohl nur aus, welcher Wert innerhalb des gültigen Bereichs liegen, aber in der Beschreibung zur Methode wird auch ausgesagt, was passiert, wenn es ausserhalb ist. Das war auch, meines Wissens nach, schon immer so.
die Beschreibung hatte ich übersehen (weil sie in SELFHTML nicht nur fehlt, sondern sogar einen speziellen Hinweis auf "nur sinnvolle Werte" enthält) und sie macht meiner Meinung nach die Einschränkung des Wertebereiches bei der Parameterangabe überflüssig. OK, vielleicht stand's in älteren Spezifikationen nicht drin, dass so zu verfahren ist, wie die Browser in der Praxis vorgehen.
Freundliche Grüße
Vinzenz
Hallo,
OK, aber wie kann ich zu einen Datum z.B. 6 Monate addieren und das korrekte ausgeben lassen?
indem Du zuerst definierst, was Du unter "6 Monate addieren" verstehst.
Bei Dir ist der Fall besonders relevant, wenn die Tagnummer im Ausgangsmonat größer ist als die maximale Tagnummer im Zielmonat. Dein Verfahren ist ein anderes als das in Javascript implementierte.
Übrigens: die Beschreibung Deines Verfahren gehört unbedingt in den Kommentar zu Deiner Funktion.
Freundliche Grüße
Vinzenz
Hi,
vermutlich daran weil es keinen 31.4. gibt?
~dave
Hallo Bernd,
ich habe eine Problem mit der Addition von Monaten mit Date();
Gegebenes Datum soll um 6 Monate erhöht werden. Das funktioniert z.B. beim Datum 31.07.2010. Da macht er brav den 31.01.2011 draus. Beim 31.10.2010 macht er dann den 01.05.2011 draus. Addiert also einfach einen Tag. Woran liegts?
möchtest Du in den Fällen, wenn der Zielmonat weniger Tage hat als der Starttag im Ausgangsmonat, den Monatsletzten des Zielmonats als Ergebnis haben?
Gilt dies auch für den 30. August? Möchtest Du dann den 28. bzw. in Schaltjahren den 29. Februar des Folgejahres haben?
Wenn ja, so prüfe nach, ob der Monatstag kleiner ist als der Monatstag des Ausgangsdatums. Wenn dies der Fall ist, so setze den Monatstag des Zieldatums auf 0. Javascript kümmert sich nach meiner Erfahrung (nochmals geprüft in Firefox 3.6.10, Opera 10.63 und IE 8, alle unter Windows 7) um den Rest, d.h. entgegen dem, was ich auf die Schnelle in Herstellerspezifikationen und Beschreibungen wie auf SELFHTML gefunden habe, verhält sich Javascript beim Date-Objekt analog zur PHP-Funktion mktime(), Beispiele #2 und #3 - und dürfte wohl ECMAScript (ich hab' in Version 5 geschaut) entsprechen.
Wenn dies jedoch *nicht* Deine Definition von "korrekt" ist und da Du mit Javascripts Ansicht von Korrektheit nicht zufrieden bist, dann spezifiere Deine Ansicht.
Freundliche Grüße
Vinzenz