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


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


13
moment.js subtractes, de hecho, destructivo. "Muta el momento original restando tiempo". Ver aquí: momentjs.com/docs/#/manipulating/subtract
docksteaderluke


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

3

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


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"

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



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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.