Sformatuj datę i odejmuj dni za pomocą Moment.js.

122

Chciałbym, aby zmienna zawierała wczorajszą datę w formacie DD-MM-YYYYużywającym Moment.js. Czyli jeśli dzisiaj jest 15-04-2015 to chciałbym odjąć dzień i mieć 14-4-2015.

Wypróbowałem kilka takich kombinacji:

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

i to:

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

a także to:

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

Ale ja tego nie rozumiem ...

beaumondo
źródło
Czy próbowałeś odejmować dane przed formatowaniem? Sformatowanie go po prostu daje ci ciąg ...
ndugger
moment (). odejmij (10, "dni") zamiast po prostu "d", może?
leopik
„Zatrzymaj” wczorajszą datę jako datę i zamień ją na sformatowany ciąg, gdy chcesz ją wyświetlić.
Pointy
@NickDugger Popełniłem błąd w tym pytaniu, ostatnia próba powinna powiedzieć startdate = moment (); w pierwszej linii. Edytowałem go teraz, dzięki
beaumondo
format()jest funkcją, która sprawia, że ​​jest to ciąg. Powinieneś to zrobić na końcu.
jwatts1980

Odpowiedzi:

210

Dzieje się wiele dziwnych rzeczy. Pierwsza została zmieniona w Twoim poście, ale była związana z kolejnością wywoływania metod.

.formatzwraca ciąg. Ciąg nie ma subtractmetody.

Drugą kwestią jest to, że odejmujesz dzień, ale nie zapisujesz go jako zmiennej.

Twój kod powinien więc wyglądać następująco:

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

Możesz jednak połączyć to razem; wyglądałoby to następująco:

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

Różnica polega na tym, że ustawiamy startdate na zmiany, które robisz w startdate, ponieważ moment jest destrukcyjny.

ndugger
źródło
13
moment.js subtractjest w rzeczywistości destrukcyjny. „Mutuje pierwotny moment, odejmując czas”. Zobacz tutaj: momentjs.com/docs/#/manipulating/subtract
docksteaderluke
11
startdate = moment().subtract(1, 'days').format('DD-MM-YYYY');
M. Adam Kendall
źródło
5

Spróbuj tego:

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

To da ci 14-04-2015- dzisiaj 15-04-2015

Alternatywnie, jeśli twoja wersja momentjs jest niższa niż 2.8.0, możesz użyć:

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

Zamiast tego:

startdate = moment().subtract(1, 'days').format('DD-MM-YYYY');
Christian Juth
źródło
3

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

Jethik
źródło
3
var date = new Date();

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

Teraz możesz sformatować, jak chcesz zobaczyć tę datę, lub możesz porównać tę datę z inną itp.

Najważniejsza jest funkcja toDate () .

canmustu
źródło
2

Myślę, że masz to w ostatniej próbie, wystarczy chwycić za sznurek .. w konsoli Chrome ..

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"
nauczyciel
źródło
2

W angularjs moment = "^ 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
źródło