Comment obtenir le décalage horaire entre deux variables de dates différentes, en particulier en années, mois et jours en utilisant moment.js?
J'ai trouvé cette méthode mais j'obtiens toujours des résultats étranges. Parfois, le résultat est un mois à l'avance, alors j'ai ajouté une partie de soustraction d'un mois pour que le résultat soit correct, mais lorsque la différence entre les deux dates peut être divisée en années entières, cela devient alors un mois en retard, mais si je supprime le mois de soustraction en partie, cela devient encore plus déréglé.
Je voudrais également le formater comme "X ans, Y mois, Z jours", mais je ne peux pas non plus comprendre comment le formater de cette manière .
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
var dateOne = new Date(2000,07,16); var dateTwo = new Date (1990,07,16); var updatedDate = moment(dateOne).format('ll'); var x = moment(dateOne, 'DD/MM/YYYY').diff(moment(dateTwo, 'DD/MM/YYYY')) var y = moment.duration(x); var why = moment(x).subtract(1, 'M'); var z = Math.floor(y.asYears()) + moment.utc(why).format('/MM/DD'); console.log(z);
3 Réponses :
Essayez ceci peut-être?
var firstDate = moment(); var secondDate = moment("2018-03-19"); var yearDiff = firstDate.diff(secondDate, "year"); var monthDiff = firstDate.diff(secondDate, "month"); var dayDiff = firstDate.diff(secondDate, "day"); console.log(yearDiff + " Years, " + monthDiff + " Months, " + dayDiff + " Days");
Une bonne réponse devrait expliquer pourquoi l'OP a son problème et comment votre code le résout. En outre, vous pouvez publier votre code sous forme d'extrait de code exécutable et inclure des bibliothèques externes. Si vous faites cela, vous constaterez que les valeurs sont la différence totale pour chaque intervalle, donc le 21/02/2019, vous obtiendrez 0 an, 11 mois, 339 jours.
Comme indiqué par d'autres personnes dans les commentaires, vous ne pouvez pas formater une durée en tant que date et comme dateOne
et dateTwo
sont des objets Date, il n'est pas nécessaire de le deuxième argument dans moment (dateOne, 'JJ / MM / AAAA')
, utilisez simplement moment (Date)
.
Moverover, veuillez noter que lorsque vous utilisez new Date (year, monthIndex, day)
monthIndex
commence à 0, voir MDN docs :
L'argument
monthIndex
est basé sur 0. Cela signifie quejanvier = 0
etdécembre = 11
.
Vous pouvez utiliser le moment-duration-format plug-in pour formater la durée de momentjs selon vos besoins, voir format () code>
sur la page du plug-in .
Voici un exemple en direct:
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/2.2.2/moment-duration-format.min.js"></script>
var dateOne = new Date(2000, 7, 16); var dateTwo = new Date(1990, 7, 16); var diff = moment(dateOne).diff(moment(dateTwo)) var dur = moment.duration(diff); var result = dur.format(); console.log(result);
Moment a une méthode appelée .diff () Utilisez celle-là. https://momentjs.com/docs/#/displaying/difference/ < / p>
réponse
Vous faites quelque chose de bizarre. D'une part, les dates et les durées sont des choses complètement différentes, vous ne pouvez pas mettre en forme une durée en tant que date. Pour un autre, la différence entre ces deux est exactement de 10 ans:
moment (dateOne) .diff (dateTwo, 'years', true)
Il n'y a aucune raison d'inclure jQuery. dateOne est un objet Date, donc pas besoin du deuxième argument dans
moment (dateOne, 'JJ / MM / AAAA')
. Vous pouvez inclure moment.js en tant que bibliothèque externe à l'aide d'un CDN, par exemplehttps://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/mome nt.min.js