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


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.


13
moment.js subtractest en fait destructeur. "Mute le moment original en soustrayant le temps". Voir ici: momentjs.com/docs/#/manipulating/subtract
docksteaderluke


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

3

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


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"

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




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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.