24

我正在浏览网络以找到一个 javascript 函数,该函数可以检查用户输入的日期是当前日期还是未来日期,但我没有找到合适的答案,所以我自己做了。想知道这是否可以通过一行代码。

 function isfutureDate(value) 
    {    
    var now = new Date;
    var target = new Date(value);

    if (target.getFullYear() > now.getFullYear()) 
    {
        return true;
    }
    else if(target.getFullYear() == now.getFullYear()) 
    {
    if (target.getMonth() > now.getMonth()) {
    return true;
    } 
    else if(target.getMonth() == now.getMonth())
    {
    if (target.getDate() >= now.getDate()) {
        return true;
    }
    else
    {
        return false
    }
    }


    }

   else{
    return false;
    }
}   
4

7 回答 7

54

您可以比较两个日期,就好像它们是整数一样:

var now = new Date();
if (before < now) {
  // selected date is in the past
}

只是他们两个都必须是日期。

在谷歌的第一次搜索导致这个:检查日期是否在过去 Javascript

但是,如果您喜欢编程,这里有一个提示:

  1. 格式为 YYYY-MM-DD 的日期可能类似于 28-12-2013。
  2. 如果我们颠倒日期,它是 2013-12-28。
  3. 我们删除冒号,得到 20131228。
  4. 我们设置了另一个日期:2013-11-27,最后是 20131127。
  5. 我们可以进行一个简单的操作:20131228 - 20131127

享受。

于 2013-09-10T07:28:35.740 回答
12

这是一个只比较日期并排除时间的版本。

打字稿

const inFuture = (date: Date) => {
    return date.setHours(0,0,0,0) > new Date().setHours(0,0,0,0)
};

ES6

const inFuture = (date) => {
    return date.setHours(0,0,0,0) > new Date().setHours(0,0,0,0)
};
于 2019-03-15T18:31:51.653 回答
3

试试这个

function isFutureDate(idate){
var today = new Date().getTime(),
    idate = idate.split("/");

idate = new Date(idate[2], idate[1] - 1, idate[0]).getTime();
return (today - idate) < 0 ? true : false;
}

演示

console.log(isFutureDate("02/03/2016")); // true
console.log(isFutureDate("01/01/2016")); // false
于 2016-02-25T07:49:42.703 回答
1

具有可容忍未来选项的 ES6 版本。

我做了这个小功能,它允许一些摆动空间(例如,输入的数据来自一个稍快的时钟)。

它需要一个Date对象,toleranceMillis它是未来可接受的秒数(默认为 0)。

const isDistantFuture = (date, toleranceMillis = 0) => {
    // number of milliseconds tolerance (i.e. 60000 == one minute)
    return date.getTime() > Date.now() + toleranceMillis
}
于 2019-03-07T22:37:17.273 回答
1

尝试这个

function IsFutureDate(dateVal) {
    var Currentdate = new Date();
        dateVal= dateVal.split("/");
    var year = Currentdate.getFullYear();
    if (year < dateVal[2]) {
        return false;//future date

    }        
    else {
        return true; //past date
    }

}
于 2019-08-23T08:01:25.920 回答
0

在我的情况下,我使用 DD-MM-YYYY 格式的日期进行比较,它给出了一个错误,因为“DD-MM-YYYY”的行为是未定义的。所以我将其转换为兼容的格式并进行比较。此外,如果您只需要比较日期而不是时间,则需要将时间参数设置为零。

var inputDateVal = "14-06-2021";

if (inputDateVal != null && inputDateVal != '') {
  var dateArr = inputDateVal.split("-");
  var inputDate = new Date('"' + dateArr[2] + "-" + dateArr[1] + "-" + dateArr[0] + '"').setHours(0, 0, 0, 0);
  
  var toDay = new Date().setHours(0, 0, 0, 0);
  
  if(inputDate > toDay){
    console.log("Date is a future date");
  }else if(inputDate== toDay){  
    console.log("Date is equal to today");
  }else{
    console.log("Date is a past date");  
  }
}

于 2021-06-14T08:36:41.643 回答
-1

您可以使用moment.js

 let dateToBeCompared = "10/24/2021"; // "DD/MM/YYYY" format
 // For past dates
  moment(dateToBeCompared, "DD/MM/YYYY").isBefore(moment(new Date(), "DD/MM/YYYY"), 
'day')
 // For same dates
  moment(dateToBeCompared, "DD/MM/YYYY").isSame(moment(new Date(), "DD/MM/YYYY"), 
'day')
 // For future dates
  moment(dateToBeCompared, "DD/MM/YYYY").isAfter(moment(new Date(), "DD/MM/YYYY"), 
'day');

还有其他功能,例如 isSameOrAfter() 和 isSameOrBefore() 看看这里

于 2021-06-09T21:26:30.273 回答