2013-03-19 4 views
0

Я работаю над приложением, где мне нужно найти разницу между датой ввода пользователем формы и текущей датой. Прямо сейчас с кодом, который у меня есть, когда я набираю текущую дату, он всегда показывает разницу в 2. Я был бы признателен за любые советы о том, как я мог бы это исправить.Работа с датами в 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

и когда я пробую дату, которая составляет два дня в будущем, она говорит, что «у меня есть еще 0 дней» – user2084813

+0

Можете привести пример строки даты, которую вы вводите в форму? – Jodes

+0

Приведите пример ввода для должной оценки –

ответ

0

Я хотел бы использовать moment.js библиотеку, чтобы заботиться о нем для вас, он имеет встроенный в difference API и будет использоваться следующим образом:

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

спасибо, но я не могу. Я делаю это для задания и должен использовать javascript. – user2084813

0

Вы должны округлять значение daysCal перед тем применяя Math.floor().

..... 

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

Во-первых, чтобы получить текущую дату, вы должны использовать Date.now() вместо +new Date. Это быстрее поддерживает браузеры и this polyfill for IE<9 легко, как пирог:

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

Вам даже не нужно это делать, если вы используете moment.js хотя:

moment(someDate).fromNow() 

.fromNow() on momentjs.com


Я бы порекомендовал использовать moment.js как @Slace recommended. Я использую moment.js в веб-приложении, которое я делаю. Их методы относительной даты возвращают легко читаемые форматы, такие как «несколько секунд назад», «четыре года назад» и т. Д. Супер простой!

Смежные вопросы