So addieren Sie in moment.js richtig 1 Monat zum aktuellen Datum hinzu

Lesezeit: 3 Minuten

Benutzeravatar von Jack Moscovi
Jack Moscovi

Ich habe in der Dokumentation von moment.js gelesen, dass Sie diesen Code verwenden können, wenn Sie 1 Monat zum aktuellen Datum hinzufügen möchten:

var moment = require('moment');
var futureMonth = moment().add(1, 'M').format('DD-MM-YYYY');

Aber das Problem ist, dass dies nicht die Art und Weise hinzufügt, wie ich es erwarte. Angenommen, das aktuelle Datum ist der 31.10.2015 (der letzte Tag im Monat Oktober). In Code:

var currentDate = moment().format('DD-MM-YYYY');
var futureMonth = moment().add(1, 'M').format('DD-MM-YYYY');

console.log(currentDate) //  Result --> 31/10/2015
console.log(futureMonth) //  Result --> 30/11/2015 

Wenn Sie sich das Kalenderdatum ansehen, sollte 1 Monat/31 Tage ab dem 31.10.2015 der 1.12.2015 (der erste Tag im Dezember) sein, nicht der 30.11.2015 (der letzte Tag im November).

Könnte mir jemand helfen, dieses Problem zu beheben?

  • Ich schätze, wonach du suchst moment().add(30, "days").

    – Vikram Deshmukh

    30. Oktober 2015 um 16:39 Uhr


  • Welche Regel willst du eigentlich? Ist es “Addieren Sie die Anzahl der Tage im laufenden Monat“? Ist es “1 Monat + 1 Tag hinzufügen”?

    – Jamiec

    30. Oktober 2015 um 16:51 Uhr


  • Es scheint, als ob die Definition in momentjs lautet, dass, wenn Sie ein Monatsende haben und 1 Monat hinzufügen, das Ende des nächsten Monats ausgeführt wird. Was mir sehr vernünftig und vorhersehbar erscheint

    – Ki

    30. Oktober 2015 um 17:07 Uhr

  • Ein Monat ist also nicht immer 30 Tage lang moment().add(30, "days") ist technisch nicht die richtige Antwort.

    – SSH Dies

    31. Januar 2017 um 17:42 Uhr

  • Bitte nennen Sie nicht richtige Dinge nicht richtig. Ich schlage vor, den Titel der Frage irgendwie zu ändern. Derzeit ist es irreführend.

    – alehro

    1. Juni 2017 um 15:25 Uhr

Benutzeravatar von silentw
stillw

var currentDate = moment('2015-10-30');
var futureMonth = moment(currentDate).add(1, 'M');
var futureMonthEnd = moment(futureMonth).endOf('month');

if(currentDate.date() != futureMonth.date() && futureMonth.isSame(futureMonthEnd.format('YYYY-MM-DD'))) {
    futureMonth = futureMonth.add(1, 'd');
}

console.log(currentDate);
console.log(futureMonth);

DEMO

BEARBEITEN

moment.addRealMonth = function addRealMonth(d) {
  var fm = moment(d).add(1, 'M');
  var fmEnd = moment(fm).endOf('month');
  return d.date() != fm.date() && fm.isSame(fmEnd.format('YYYY-MM-DD')) ? fm.add(1, 'd') : fm;  
}

var nextMonth = moment.addRealMonth(moment());

DEMO

  • Ich frage mich nur, ob dieser Code flexibel ist? oder es ist nur das aktuelle Datumsproblem 31.10.2015 – 1.12.2015 behoben?

    – Jack Moscovi

    30. Oktober 2015 um 16:47 Uhr

  • Das geht nur anders schief – Juli und August haben beide 31 Tage. Wenn Sie zum 31. Juli einen Monat addieren, erhalten Sie den 1. September.

    – Jamiec

    30. Oktober 2015 um 16:48 Uhr


  • Wow, ich habe es am letzten Januar getestet, das ist der 31. Januar, und es funktioniert perfekt. Vielen Dank!

    – Jack Moscovi

    30. Oktober 2015 um 17:25 Uhr


Nach neuesten Dok Sie können Folgendes tun –

Fügen Sie einen Tag hinzu

moment().add(1, 'days').calendar();

Jahr hinzufügen

moment().add(1, 'years').calendar();

Monat hinzufügen

moment().add(1, 'months').calendar();

  • Diese Antwort ist falsch und fügt einen Monat gemäß der obigen Anfrage nicht korrekt hinzu

    – Eike Thies

    6. November 2019 um 22:22 Uhr

  • Versuchen moment('2020-03-30').add(1, 'months') und dann mit vergleichen moment('2020-03-31').add(1, 'months'). Das Ergebnis wird dasselbe sein, was falsch ist.

    – Tomasz Kasperczyk

    31. März 2020 um 18:17 Uhr

  • @TomaszKasperczyk Pl. hier berichten – github.com/moment/moment/issues

    – Anoop M Maddasseri

    2. Februar 2021 um 13:11 Uhr

Benutzeravatar von Nishith
Nishith

startDate = "20.03.2020";
var newDate = moment(startDate, "DD-MM-YYYY").add(5, 'days');
console.log(newDate)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

  • Während dieser Code die Frage beantworten kann, würde die Bereitstellung von zusätzlichem Kontext dazu, wie und/oder warum er das Problem löst, den langfristigen Wert der Antwort verbessern.

    – Piotr Labunski

    19. März 2020 um 8:41 Uhr

  • Da steht, füge 1 Monat hinzu und du fügst 4 Tage hinzu

    – Ahmet Firat Keler

    3. November um 14:08 Uhr

Du könntest es versuchen

moment().add(1, 'M').subtract(1, 'day').format('DD-MM-YYYY')

1434610cookie-checkSo addieren Sie in moment.js richtig 1 Monat zum aktuellen Datum hinzu

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy