Formate a data e subtraia os dias usando Moment.js

121

Eu gostaria que uma variável contivesse a data de ontem no formato DD-MM-YYYY contivesse usando Moment.js. Então, se hoje é 15-04-2015, gostaria de subtrair um dia e ter 14-4-2015.

Tentei algumas combinações como esta:

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

e isto:

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

e também este:

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

Mas não estou entendendo ...

beaumondo
fonte
Você já tentou subtrair antes de formatar? A formatação apenas fornece uma string ...
ndugger
moment (). subtrair (10, "dias") em vez de apenas "d" talvez?
leopik
"Segure" a data de ontem como uma data e transforme-a em uma string formatada quando precisar exibi-la.
Pointy de
@NickDugger cometi um erro nessa questão, a última tentativa deveria dizer startdate = moment (); na primeira linha. Eu editei agora, obrigado
beaumondo
format()é a função que o torna uma string. Você deve fazer isso por último.
jwatts1980

Respostas:

210

Você tem várias coisas estranhas acontecendo. O primeiro foi editado na sua postagem, mas tinha a ver com a ordem em que os métodos estavam sendo chamados.

.formatretorna uma string. String não tem umsubtract método.

O segundo problema é que você está subtraindo o dia, mas não o salvando como uma variável.

Seu código, então, deve ser semelhante a:

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

No entanto, você pode encadear isso juntos; isso seria parecido com:

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

A diferença é que estamos definindo startdate para as alterações que você está fazendo na startdate, porque o momento é destrutivo.

ndugger
fonte
13
moment.js subtracté, de fato, destrutivo. "Muda o momento original subtraindo o tempo". Veja aqui: momentjs.com/docs/#/manipulating/subtract
docksteaderluke
11
startdate = moment().subtract(1, 'days').format('DD-MM-YYYY');
M. Adam Kendall
fonte
5

Experimente isto:

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

Isso lhe dará 14-04-2015- hoje é 15-04-2015

Como alternativa, se sua versão do momentjs for inferior a 2.8.0, você pode usar:

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

Em vez disso:

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

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

Jethik
fonte
2

Acho que você conseguiu nessa última tentativa, você só precisa pegar a corda .. no console do 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
fonte
2

No 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
fonte
2
var date = new Date();

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

Agora, você pode formatar como deseja ver esta data ou pode comparar esta data com outra etc.

A função toDate () é o ponto.

canmustu
fonte