我想计算今天到指定日期之间的天数,并检查截至今天剩余的天数或今天过去的天数。
var today = new Date();
var date_to_reply = new Date('2012-10-15');
var timeinmilisec = today.getTime() - date_to_reply.getTime();
console.log( Math.floor(timeinmilisec / (1000 * 60 * 60 * 24)) );
这给了我 5 作为答案,但我应该如何获得( - 5),因为date_to_reply是从今天起的5天过去了?
这是计算任何给定日期的正确方法吗?
此致
答案 0 :(得分:5)
您正在做的是正确的:您想要计算两个日期之间的差异(以天数为单位)。差异不能小于零。
虽然您的date_to_reply
已经过去,但仍有5天的差异。
所以,一切都很好 - 这是正确的方法。
编辑: 如果您想要一个负值作为结果,请尝试:
var today = new Date();
var date_to_reply = new Date('2012-10-15');
var timeinmilisec = date_to_reply.getTime() - today.getTime();
console.log( Math.ceil(timeinmilisec / (1000 * 60 * 60 * 24)) );
请记住,您需要Math.ceil
最终结果,而不是使用Math.floor()
将其四舍五入。
答案 1 :(得分:1)
如果您希望该值为负值(表示过去为date_to_reply
),则应从当前值中减去过去的日期:date_to_reply.getTime() - today.getTime()
。
检查this link有关计算更多差异化结果的方法。
答案 2 :(得分:1)
如果您更换日期的顺序,您将获得所需的负数。
更好的是,您可以编写一个执行此操作的函数。
它可以从第二个参数中减去第一个参数。
第二个参数可能默认为今天。
function diffDates(dateOne, dateTwo) {
if (typeof dateTwo === 'undefined') {
dateTwo = new Date();
}
return dateOne.getTime() - dateTwo.getTime();
}
最好让函数对数字而不是日期进行操作。
那会更灵活,但我现在正在iPad上打字!
答案 3 :(得分:0)
很明显因为今天的日期比以前更大了。因此,您需要自己将其设为否定或使用此
var timeinmilisec = date_to_reply.getTime()-today.getTime();