如何检查指定日期是否在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,这就是我正在编写我的应用程序)
答案 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;
}