web-dev-qa-db-fra.com

Obtenez les jours, heures et minutes dans Moment.js

C'est donc la première fois que j'utilise Moment.js et j'ai rencontré le problème suivant. J'ai donc les dates suivantes:

now: 2017-01-26T14:21:22+0000
expiration: 2017-01-29T17:24:22+0000

Ce que je veux obtenir, c'est:

Day: 3
Hours: 3
Mins: 3

J'ai essayé le code suivant:

const now = moment();
const exp = moment(expire_date);
console.log(expire_date);
days = exp.diff(now, 'days');
hours = exp.diff(now, 'hours') - (days * 24);
minutes = exp.diff(now, 'minutes') - ((days * 1440) + (hours * 24) * 60);

Je sais que j'ai fait quelque chose de mal (peut-être mon calcul ou la mauvaise méthode), mais je ne peux pas comprendre ce que c'est. 

16
I am L

MomentJS peut calculer tout cela pour vous sans aucune logique.

  • Tout d'abord trouver la différence entre les deux moments
  • Exprimez-le en tant que durée
  • Puis affichez le composant .days(), .hours() de la durée souhaitée.

Remarque: Vous pouvez également exprimer la durée entière .asDays(), .asHours() etc. si vous le souhaitez.

const now = moment("2017-01-26T14:21:22+0000");
const expiration = moment("2017-01-29T17:24:22+0000");

// get the difference between the moments
const diff = expiration.diff(now);

//express as a duration
const diffDuration = moment.duration(diff);

// display
console.log("Days:", diffDuration.days());
console.log("Hours:", diffDuration.hours());
console.log("Minutes:", diffDuration.minutes());
<script src="https://momentjs.com/downloads/moment.js"></script>

24
gotomanners

cela vous donnera les bonnes valeurs et éliminera le mal de tête des calculs manuels

let expiration = "2017-01-29T17:24:22+0000"
const now = moment();
const exp = moment(expiration);

console.log(exp.format());

days = exp.diff(now, 'days');
hours = exp.subtract(days, 'days').diff(now, 'hours');
minutes = exp.subtract(hours, 'hours').diff(now, 'minutes');

console.log(days, hours, minutes)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

notez que les opérations substract muteront la valeur exp originale, aussi ne le transmettez pas en l'attendant comme date originale

4
alebianco

Essayez ma solution. Je pense que c'est ça:

  var now = moment("2017-01-26T14:21:22+0000");
  var expiration = moment("2017-01-29T17:24:22+0000");
  var minsAverage = expiration.diff(now, "minutes");

  var min = parseInt(minsAverage % 60);
  var hours = parseInt(minsAverage / 60);
  var days = parseInt(hours / 24);
  hours = hours - 24*days;
1
Nedim Hozić

Pour plus d'informations, consultez la documentation https://momentjs.com/docs/#/displaying/difference/

var now = moment()
var exp = moment().add(1,'days')
var days = exp.diff(now, 'days')
var months = exp.diff(now, 'months')
var years = exp.diff(now, 'years', true) //float number

console.log(now,exp,days, months, years)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

0
damianfabian