Mettre en forme la date et soustraire les jours à l'aide de Moment.js

121

Je voudrais qu'une variable contienne la date d'hier au format DD-MM-YYYYutilisant Moment.js. Donc, si aujourd'hui est 15-04-2015, je voudrais soustraire un jour et avoir 14-4-2015.

J'ai essayé quelques combinaisons comme celle-ci:

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

et ça:

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

et aussi ceci:

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

Mais je ne comprends pas ...

Beaumondo
la source
Avez-vous essayé de soustraire avant de formater? Le formatage vous donne juste une chaîne ...
ndugger
moment (). soustraire (10, "jours") au lieu de juste "d" peut-être?
leopik
"Conservez" la date d'hier comme date et transformez-la en une chaîne formatée lorsque vous devez l'afficher.
Pointy
@NickDugger J'ai fait une erreur dans cette question, la dernière tentative devrait dire startdate = moment (); dans la première ligne.
Je l'ai
format()est la fonction qui en fait une chaîne. Vous devriez faire cela en dernier.
jwatts1980

Réponses:

210

Vous avez plusieurs bizarreries qui se produisent. Le premier a été modifié dans votre message, mais il avait à voir avec l'ordre dans lequel les méthodes étaient appelées.

.formatrenvoie une chaîne. String n'a pas de subtractméthode.

Le deuxième problème est que vous soustrayez le jour, mais ne l'enregistrez pas réellement en tant que variable.

Votre code devrait donc ressembler à ceci:

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

Cependant, vous pouvez enchaîner cela; cela ressemblerait à:

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

La différence est que nous définissons la date de début des modifications que vous effectuez à la date de début, car le moment est destructeur.

ndugger
la source
13
moment.js subtractest en fait destructeur. "Mute le moment original en soustrayant le temps". Voir ici: momentjs.com/docs/#/manipulating/subtract
docksteaderluke
11
startdate = moment().subtract(1, 'days').format('DD-MM-YYYY');
M. Adam Kendall
la source
5

Essaye ça:

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

Cela vous donnera 14-04-2015- aujourd'hui est 15-04-2015

Alternativement, si votre version momentjs est inférieure à 2.8.0, vous pouvez utiliser:

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

Au lieu de cela:

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

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

Jethik
la source
2

Je pense que vous l'avez compris lors de cette dernière tentative, il vous suffit de saisir la chaîne ... dans la console 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
la source
2

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



Raphael Vitor
la source
2
var date = new Date();

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

Maintenant, vous pouvez formater comment vous voulez voir cette date ou vous pouvez comparer cette date avec une autre, etc.

La fonction toDate () est le point.

canmustu
la source