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.