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


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.


13
moment.js subtractjest w rzeczywistości destrukcyjny. „Mutuje pierwotny moment, odejmując czas”. Zobacz tutaj: momentjs.com/docs/#/manipulating/subtract
— docksteaderluke


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


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


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"

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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.