Formatta la data e Sottrai giorni utilizzando Moment.js


121

Vorrei che una variabile contenga la data di ieri nel formato che DD-MM-YYYYutilizza Moment.js. Quindi se oggi è il 15-04-2015, vorrei sottrarre un giorno e avere il 14-4-2015.

Ho provato alcune combinazioni come questa:

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

e questo:

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

e anche questo:

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

Ma non lo capisco ...


Hai provato a sottrarre prima di formattare? La formattazione ti dà solo una stringa ...
ndugger

moment (). subtract (10, "days") invece di "d" forse?
leopik

"Conserva" la data di ieri come data e trasformala in una stringa formattata quando devi visualizzarla.
Pointy

@ NickDugger ho fatto un errore in quella domanda l'ultimo tentativo dovrebbe dire startdate = moment (); nella prima riga. L'ho modificato ora grazie
beaumondo

format()è la funzione che lo rende una stringa. Dovresti farlo per ultimo.
jwatts1980

Risposte:


210

Hai più stranezze che accadono. Il primo è stato modificato nel tuo post, ma aveva a che fare con l'ordine in cui i metodi venivano chiamati.

.formatrestituisce una stringa. String non ha un subtractmetodo.

Il secondo problema è che stai sottraendo il giorno, ma non lo stai effettivamente salvando come variabile.

Il tuo codice, quindi, dovrebbe essere simile a:

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

Tuttavia, puoi concatenarlo insieme; questo sarebbe:

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

La differenza è che stiamo impostando la data di inizio sulle modifiche che stai apportando alla data di inizio, perché il momento è distruttivo.


13
moment.js subtractè, infatti, distruttivo. "Muta il momento originale sottraendo il tempo". Vedi qui: momentjs.com/docs/#/manipulating/subtract
docksteaderluke


5

Prova questo:

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

Questo ti darà 14-04-2015- oggi è il 15-04-2015

In alternativa, se la tua versione momentjs è inferiore alla 2.8.0, puoi usare:

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

Invece di questo:

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

3

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


2

Penso che tu l'abbia ottenuto in quell'ultimo tentativo, devi solo afferrare la stringa .. nella console di 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

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



2
var date = new Date();

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

Ora puoi formattare come vuoi vedere questa data o puoi confrontare questa data con un'altra ecc.

La funzione toDate () è il punto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.