4

我想计算今天和给定日期之间的天数,并检查距离今天还有多少天或从今天过去多少天。

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作为答案,但是由于 date_to_reply 从今天起已经过去了5 天,我应该如何得到(-5) ?

这是计算任何给定日期的正确方法吗?

问候

4

4 回答 4

7

你所做的是正确的:你想计算两个日期之间的差异(天数)。差值不能小于零。

虽然你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().

于 2012-10-20T07:02:50.010 回答
1

如果您希望该值为负数(表示date_to_reply过去),则应从当前日期中减去过去日期:date_to_reply.getTime() - today.getTime()

检查此链接以了解计算更多差异化结果的方法。

于 2012-10-20T07:04:41.227 回答
1

如果你交换日期的顺序,你会得到你想要的负数。

更好的是,您可以编写一个执行此操作的函数。

它可以从第二个参数中减去第一个参数。

第二个参数可以默认为今天。

function diffDates(dateOne, dateTwo) {
    if (typeof dateTwo === 'undefined') {
        dateTwo = new Date();
    }
    return dateOne.getTime() - dateTwo.getTime();
}

让函数对数字而不是日期进行操作会更好。

那会更灵活,但我现在正在 iPad 上打字!

于 2012-10-20T07:06:44.393 回答
0

这很明显,因为今天的日期比以前的大。因此,要么您需要自己将其设为负数,要么使用它

var timeinmilisec = date_to_reply.getTime()-today.getTime();
于 2012-10-20T07:10:11.227 回答