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 ...


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.


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


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');

3

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


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"

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
``



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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.