398 votes

Comment calculer le nombre de jours entre deux dates

J'ai deux dates d'entrée provenant du contrôle Date Picker. J'ai sélectionné la date de début 2/2/2012 et la date de fin 2/7/2012. J'ai écrit le code suivant pour cela.

Je devrais obtenir un résultat de 6 mais j'obtiens 5.

function SetDays(invoker) {   
    var start = $find('<%=StartWebDatePicker.ClientID%>').get_value();
    var end = $find('<%=EndWebDatePicker.ClientID%>').get_value();

    var oneDay=1000 * 60 * 60 * 24;
    var difference_ms = Math.abs(end.getTime() - start.getTime())
    var diffValue = Math.round(difference_ms / oneDay);
}

Quelqu'un peut-il me dire comment obtenir la différence exacte ?

0 votes

Pourquoi obtenir le résultat = 6 ? ?? 07 - 02 = 05 jours....

1 votes

Mais l'intervalle de jours de 2 à 7 est de 2,3,4,5,6,7 = 6 jours.

0 votes

En prenant la différence, je veux considérer la date de début aussi.....

885voto

Supr Points 4738

http://momentjs.com/ o https://date-fns.org/

De la documentation de Moment :

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days')   // =1

ou d'inclure le début :

a.diff(b, 'days')+1   // =2

C'est mieux que de s'occuper manuellement des horodateurs et des fuseaux horaires.

En fonction de votre cas d'utilisation spécifique, vous pouvez soit

  1. Utilice a/b.startOf('day') et/ou a/b.endOf('day') pour forcer le diff à être inclusif ou exclusif aux "extrémités" (comme suggéré par @kotpal dans les commentaires).
  2. Définir le troisième argument true pour obtenir une différence en virgule flottante que vous pouvez ensuite Math.floor , Math.ceil o Math.round si nécessaire.
  3. L'option 2 peut également être réalisée en obtenant 'seconds' au lieu de 'days' puis en divisant par 24*60*60 .

89voto

Rakesh Prajapati Points 193

Si vous utilisez moment.js vous pouvez le faire facilement.

var start = moment("2018-03-10", "YYYY-MM-DD");
var end = moment("2018-03-15", "YYYY-MM-DD");

//Difference in number of days
moment.duration(start.diff(end)).asDays();

//Difference in number of weeks
moment.duration(start.diff(end)).asWeeks();

Si vous voulez trouver la différence entre une date donnée et la date actuelle en nombre de jours (sans tenir compte de l'heure), assurez-vous de supprimer l'heure de l'objet moment de la date actuelle comme ci-dessous

moment().startOf('day')

Trouver la différence entre une date donnée et la date actuelle en nombre de jours.

var given = moment("2018-03-10", "YYYY-MM-DD");
var current = moment().startOf('day');

//Difference in number of days
moment.duration(given.diff(current)).asDays();

7 votes

AsDays() m'a renvoyé des valeurs avec des décimales. J'utilise current.diff(given, 'days') donc il s'arrondit.

0 votes

@Vincent il semble que vous l'utilisiez de la mauvaise façon. C'est définitivement la solution la plus propre, le résultat est correct comparé à la réponse de @Supr dans laquelle un 1 est perdue

22voto

user0401217002 Points 1

Essayez ceci en utilisant moment.js (il est assez facile de calculer des opérations de date en javascript).

firstDate.diff(secondDate, 'days', false) ; // vrai|faux pour la valeur de la fraction

Le résultat vous donnera le nombre de jours en nombre entier.

2 votes

Voici la signature : moment().diff(Moment|Chaîne|Nombre|Date|Array, Chaîne, Booléen) ;

19voto

Richard Points 1110

Essayez :

//Difference in days

var diff =  Math.floor(( start - end ) / 86400000);
alert(diff);

0 votes

Je pense que c'est fondamentalement correct, mais n'est-ce pas essentiellement la même chose que ce qui est dans l'OP ?

0 votes

A cause de la façon dont il l'a écrit, je n'ai pas remarqué, mais oui, à peu près ! :P

11 votes

Je n'aime pas chiffres magiques il serait préférable que ce chiffre soit décomposé en une équation explicite.

15voto

Martin Kravec Points 125

Cela fonctionne pour moi :

const from = '2019-01-01';
const to   = '2019-01-08';

Math.abs(
    moment(from, 'YYYY-MM-DD')
      .startOf('day')
      .diff(moment(to, 'YYYY-MM-DD').startOf('day'), 'days')
  ) + 1
);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X