Formatieren Sie das Datum und subtrahieren Sie die Tage mit Moment.js.

119

Ich möchte, dass eine Variable das gestrige Datum im Format DD-MM-YYYYmit Moment.js hält. Wenn heute also der 15.04.2015 ist, möchte ich einen Tag abziehen und den 14.4.2015 haben.

Ich habe einige Kombinationen wie diese ausprobiert:

startdate = moment().format('DD-MM-YYYY');
startdate.subtract(1, 'd');

und das:

startdate = moment().format('DD-MM-YYYY').subtract(1, 'd');

und auch das:

startdate = moment();
startdate.subtract(1, 'd');
startdate.format('DD-MM-YYYY')

Aber ich verstehe es nicht ...

Beaumondo
quelle
Haben Sie versucht, vor dem Formatieren zu subtrahieren? Wenn Sie es
formatieren, erhalten
moment (). subtrahieren (10, "Tage") statt nur "d" vielleicht?
Leopik
Halten Sie das gestrige Datum als Datum fest und verwandeln Sie es in eine formatierte Zeichenfolge, wenn Sie es anzeigen müssen.
Pointy
@ NickDugger Ich habe einen Fehler in dieser Frage gemacht. Der letzte Versuch sollte startdate = moment () lauten. in der ersten Zeile.
Ich habe
format()ist die Funktion, die es zu einem String macht. Das solltest du zuletzt machen.
jwatts1980

Antworten:

208

Es treten mehrere Kuriositäten auf. Die erste wurde in Ihrem Beitrag bearbeitet, hatte jedoch mit der Reihenfolge zu tun, in der die Methoden aufgerufen wurden.

.formatgibt eine Zeichenfolge zurück. String hat keine subtractMethode.

Das zweite Problem ist, dass Sie den Tag subtrahieren, dies aber nicht als Variable speichern.

Ihr Code sollte also folgendermaßen aussehen:

var startdate = moment();
startdate = startdate.subtract(1, "days");
startdate = startdate.format("DD-MM-YYYY");

Sie können dies jedoch miteinander verketten. das würde so aussehen:

var startdate = moment().subtract(1, "days").format("DD-MM-YYYY");

Der Unterschied besteht darin, dass wir das Startdatum auf die Änderungen festlegen, die Sie am Startdatum vornehmen, da der Moment destruktiv ist.

ndugger
quelle
13
moment.js subtractist in der Tat destruktiv. "Mutiert den ursprünglichen Moment durch Subtrahieren der Zeit". Siehe hier: momentjs.com/docs/#/manipulating/subtract
Docksteaderluke
11
startdate = moment().subtract(1, 'days').format('DD-MM-YYYY');
M. Adam Kendall
quelle
5

Versuche dies:

var duration = moment.duration({'days' : 1});
moment().subtract(duration).format('DD-MM-YYYY');

Dies wird Ihnen geben 14-04-2015- heute ist 15-04-2015

Wenn Ihre momentjs-Version kleiner als 2.8.0 ist, können Sie alternativ Folgendes verwenden:

startdate = moment().subtract('days', 1).format('DD-MM-YYYY');

An Stelle von:

startdate = moment().subtract(1, 'days').format('DD-MM-YYYY');
Christian Juth
quelle
3

startdate = moment().subtract(1, 'days').startOf('day')

Jethik
quelle
2

Ich denke, Sie haben es in diesem letzten Versuch, Sie müssen nur die Zeichenfolge greifen .. in der Chrome-Konsole ..

startdate = moment();
startdate.subtract(1, 'd');
startdate.format('DD-MM-YYYY');
"14-04-2015"

startdate = moment();
startdate.subtract(1, 'd');
myString = startdate.format('DD-MM-YYYY');
"14-04-2015"
myString
"14-04-2015"
Lecstor
quelle
2

Im Winkelmoment = "^ 1.3.0"

moment('15-01-1979', 'DD-MM-YYYY').subtract(1,'days').format(); //14-01-1979
or
moment('15-01-1979', 'DD-MM-YYYY').add(1,'days').format(); //16-01-1979
``


Raphael Vitor
quelle
2
var date = new Date();

var targetDate = moment(date).subtract(1, 'day').toDate(); // date object

Jetzt können Sie formatieren, wie Sie dieses Datum sehen möchten, oder Sie können dieses Datum mit einem anderen vergleichen usw.

Die Funktion toDate () ist der Punkt.

canmustu
quelle