Soustraction de date javascript

Je cherche une façon de faire une soustraction correcte entre deux objets Date JavaScript et obtenir le jour du delta.

C'est mon approche, mais il échoue pour la date d'aujourd'hui en tant que contribution:

<script type="text/javascript"> function getDayDelta(incomingYear,incomingMonth,incomingDay){ var incomingDate = new Date(incomingYear,incomingMonth,incomingDay); var today = new Date(); var delta = incomingDate - today; var resultDate = new Date(delta); return resultDate.getDate(); } //works for the future dates: alert(getDayDelta(2009,9,10)); alert(getDayDelta(2009,8,19)); //fails for the today as input, as expected 0 delta,instead gives 31: alert(getDayDelta(2009,8,18)); </script> 

Quelle serait une meilleure approche pour cela?

Le numéro de mois dans la fonction Constructeur de date est basé sur zéro, vous devez soustraire un, et je pense qu'il est plus simple de calculer le delta à l'aide de l'horodatage:

 function getDayDelta(incomingYear,incomingMonth,incomingDay){ var incomingDate = new Date(incomingYear,incomingMonth-1,incomingDay), today = new Date(), delta; // EDIT: Set time portion of date to 0:00:00.000 // to match time portion of 'incomingDate' today.setHours(0); today.setMinutes(0); today.setSeconds(0); today.setMilliseconds(0); // Remove the time offset of the current date today.setHours(0); today.setMinutes(0); delta = incomingDate - today; return Math.round(delta / 1000 / 60 / 60/ 24); } getDayDelta(2008,8,18); // -365 getDayDelta(2009,8,18); // 0 getDayDelta(2009,9,18); // 31 

(2009,8,18) n'est PAS le 18 août. C'est le 18 septembre.

Vous pouvez appeler getTime () sur chaque objet de date, puis soustraire le dernier de l'ancien. Cela vous donnerait le nombre de millisecondes de différence entre les deux objets. De là, il est facile d'arriver à des jours.

Un couple de hoquet à surveiller, cependant: 1) l'heure d'été, et 2) s'assurer que votre temps provient du même fuseau horaire.

Cela fonctionnera mieux, mais il ne traite pas correctement les valeurs de résultat négatives. Vous voudrez peut-être simplement analyser les valeurs vous-même et les traiter.

 function getDayDelta(incomingYear,incomingMonth,incomingDay){ var incomingDate = new Date(incomingYear,incomingMonth-1,incomingDay); var today = new Date(); today = new Date(Date.parse(today.format("yyyy/MM/dd"))); var delta = incomingDate - today; if (delta == 0) { return 0; } var resultDate = new Date(delta); return resultDate.getDate(); } //works for the future dates: alert(getDayDelta(2009,9,10)); alert(getDayDelta(2009,8,19)); alert(getDayDelta(2009, 8, 18));