我正在开发一个应用程序,我需要找到用户输入表单的日期与当前日期之间的差异。现在有我的代码,当我输入当前日期时,它总是显示2的差异。我将不胜感激任何有关如何理顺这一点的建议。
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)
我会使用moment.js库为您处理它,它有一个difference API版本,可以这样使用:
var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days') // 1
答案 1 :(得分:0)
在应用Math.floor()之前,您必须舍入daysCal值。
.....
var days = Math.floor(Math.round(daysCal));
.....
答案 2 :(得分:0)
首先要获取当前日期,您应使用Date.now()
代替+new Date
。它支持浏览器的速度更快,而this polyfill for IE<9很容易实现:
Date.now = Date.now || function() {
return +new Date;
};
如果您使用moment.js,则甚至不需要这样做:
moment(someDate).fromNow()
我建议将moment.js用作@Slace recommended。我正在使用我正在制作的网络应用中的moment.js。他们的相对日期方法返回易于阅读的格式,如“几秒钟前”,“四年前”等。超级简单!