Dar formato a la fecha y restar días con Moment.js

121

Me gustaría que una variable contenga la fecha de ayer en el formato que DD-MM-YYYYusa Moment.js. Entonces, si hoy es 15-04-2015, me gustaría restar un día y tener 14-4-2015.

Probé algunas combinaciones como esta:

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

y esto:

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

y también esto:

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

Pero no lo entiendo ...

beaumondo
fuente
¿Ha intentado restar antes de formatear? Formatearlo solo le da una cadena ...
ndugger
momento (). restar (10, "días") en lugar de solo "d", ¿quizás?
leopik
"Mantenga" la fecha de ayer como fecha y conviértala en una cadena formateada cuando necesite mostrarla.
Puntiagudo
@NickDugger cometí un error en esa pregunta, el último intento debería decir startdate = moment (); en la primera línea. Lo he editado ahora gracias
beaumondo
format()es la función que lo convierte en una cadena. Deberías hacer eso último.
jwatts1980

Respuestas:

210

Tienes múltiples rarezas sucediendo. El primero ha sido editado en su publicación, pero tenía que ver con el orden en que se llamaban los métodos.

.formatdevuelve una cadena. String no tiene subtractmétodo.

El segundo problema es que está restando el día, pero en realidad no lo está guardando como una variable.

Su código, entonces, debería verse así:

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

Sin embargo, puede encadenar esto; esto se vería así:

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

La diferencia es que estamos configurando fecha de inicio para los cambios que está haciendo en fecha de inicio, porque el momento es destructivo.

ndugger
fuente
13
moment.js subtractes, de hecho, destructivo. "Muta el momento original restando tiempo". Ver aquí: momentjs.com/docs/#/manipulating/subtract
docksteaderluke
11
startdate = moment().subtract(1, 'days').format('DD-MM-YYYY');
M. Adam Kendall
fuente
5

Prueba esto:

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

Esto le dará 14-04-2015- hoy es 15-04-2015

Alternativamente, si su versión de momentjs es menor que 2.8.0, puede usar:

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

En lugar de esto:

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

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

Jethik
fuente
2

Creo que lo consiguió en ese último intento, solo necesita agarrar la cadena ... en la consola de 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"
lecstor
fuente
2

En momento angularjs = "^ 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
fuente
2
var date = new Date();

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

Ahora, puede formatear cómo desea ver esta fecha o puede comparar esta fecha con otra, etc.

La función toDate () es el punto.

canmustu
fuente