如何计算日期是否在三年之内?

时间:2018-02-22 03:08:35

标签: javascript date datetime extjs time

如何检查指定日期是否在3年后。例如,如果02/23/2020以毫秒为单位给出,1582434000000,我如何检查它是否在3年后才能生效?我尝试了以下内容,

//returns true if supplied date is 3 or less years from now
//false otherwise
var f = function( date )
{
    var now = new Date();
    date = new Date( date );

    if( now.getFullYear() + 3 < date.getFullYear() )
        return false;
    else if( now.getFullYear() + 3 === date.getFullYear() )
    {
        if( now.getMonth() < date.getMonth() )
            return false;
        else if ( now.getMonth() === date.getMonth() )
        {
            if( now.getDate() < date.getDate() )
                return false;
        }
    }
    return true;
}

我只关心日期(不考虑时间)。因此,如果今天是02/21/2018,那么02/21/2021的任何时间都是有效的。它是否正确 ?有没有更清洁的方法来解决这个问题?遗憾的是我不能使用像Moment.js这样的外部库(我可以使用ExtJS,这就是我正在编写我的应用程序)

2 个答案:

答案 0 :(得分:1)

只需在now添加一些年份就更清楚了:

function check(date) {
  var now = new Date();
  var inThreeYears = new Date(now.setFullYear(now.getFullYear() + 3));
  
  return date < inThreeYears;
}

console.log(check(new Date(2019, 0, 1))); //true
console.log(check(new Date(2024, 0, 1))); //false

答案 1 :(得分:0)

这是一个开始,虽然它不会考虑闰年,时区,闰秒和各种其他日期怪异。从这个意义上说,这是一个粗糙的解决方 基本上,我转换&#34;现在&#34;到今天的开始(午夜),并将未来日期转换为当天的开始日期(午夜)。看看差异是否小于3年毫秒。

function checkDateDiff(futureDate) {
        //get current date's midnght
        var now = new Date();
        var nowStart = new Date(now.getFullYear(), now.getMonth(), now.getDate());

        //get future date's midnight
        var newDate = new Date(futureDate);
        //get midnight on future date, plus one whole day (because you said you want to account for any time *on* the future date)
        var futureStart = new Date(newDate.getFullYear(), newDate.getMonth(), newDate.getDate()) + 8.64e+7;

        return futureStart - nowStart < 9.461e10;
    }