2013-03-19 3 views
0

Je travaille sur une application où je dois trouver la différence entre la date à laquelle l'utilisateur entre dans un formulaire et la date actuelle. En ce moment, avec le code que j'ai, quand je tape la date actuelle, il montre toujours une différence de 2. J'apprécierais tout conseil sur la façon dont je pourrais redresser cela.travailler avec des dates en javascript

function compareDates(dueDate) { //dueDate is the value from the form 
var cdate = new Date(); 
var cdateparse = Date.parse(cdate); 
var dueDateparse = Date.parse(dueDate); 
var diff = dueDateparse - cdateparse; 
var daysCal = diff/1000/60/60/24; 
var days = Math.floor(daysCal); 
console.log(days); //keeps returning -2 when I enter the current date into the form 
try { 
if(diff < 0) { 
mymessage = "this task is overdue by" + " " + -days + " " + "days"; //shows 2 
    throw new Error("you are overdue"); 
    } 
    } 
catch(ex) { 
alert(ex.message); 
return; 
} 
if(diff > 0) { 
console.log("the difference is greater than 0"); 
mymessage = "you have" + " " + days + " " + "more days"; 
} 
} 
+0

et quand j'essaie une date qui est deux jours dans le futur il est dit "j'ai 0 jours de plus" – user2084813

+0

Pouvez-vous donner un exemple de chaîne de la date que vous entrez dans le formulaire? – Jodes

+0

Donnez-nous un exemple d'entrée pour dueDate s'il vous plaît –

Répondre

0

Je voudrais utiliser la bibliothèque moment.js pour prendre soin d'elle pour vous, il a une construction dans difference API et serait utilisé comme ceci:

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

merci, mais je ne peux pas. Je fais cela pour une mission et je dois utiliser javascript. – user2084813

0

Vous devez arrondir la valeur daysCal avant appliquer Math.floor().

..... 

var days = Math.floor(Math.round(daysCal)); 
..... 
0

Tout d'abord pour obtenir la date actuelle, vous devez utiliser Date.now() au lieu de +new Date. Il est plus rapide dans les navigateurs supportant et this polyfill for IE<9 est simple comme bonjour:

Date.now = Date.now || function() { 
   return +new Date; 
}; 

Vous ne même pas besoin de faire cela si vous utilisez moment.js si:

moment(someDate).fromNow() 

.fromNow() on momentjs.com


Je recommanderais d'utiliser moment.js comme @Slace recommended. J'utilise moment.js dans une application web que je fais. Leurs méthodes de dates relatives rendent des formats faciles à lire comme "il y a quelques secondes", "il y a quatre ans", etc. Super simple!