Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript计算日期中的年差异错误?_Javascript_Time - Fatal编程技术网

Javascript计算日期中的年差异错误?

Javascript计算日期中的年差异错误?,javascript,time,Javascript,Time,我试图理解JavaScript中的日期。但是我不能得到它 我创建了一个函数,它接受两个日期,并根据日期差返回一个值 以下是全部代码: function checkDate(birth_date, download_date) { let yearDiff = download_date.getFullYear() - birth_date.getFullYear(); console.log(yearDiff); if (yearDiff > 5) return &

我试图理解JavaScript中的日期。但是我不能得到它

我创建了一个函数,它接受两个日期,并根据日期差返回一个值

以下是全部代码:

function checkDate(birth_date, download_date) {
    let yearDiff = download_date.getFullYear() - birth_date.getFullYear();
    console.log(yearDiff);
    if (yearDiff > 5) return "Not Eligible";
    if (yearDiff < 5) return "Eligible";
    if (yearDiff == 5) {
        // Eligible only if 5 years or low

        // If diff is Exact 5 Years Check if Bday is on download date ?
        // First Check Month
        let monthDiff = download_date.getMonth() - birth_date.getMonth();
        if (monthDiff >= 1) {
            return "Not Eligible"
        }
        if (monthDiff <= -1) {
            return "Eligible"
        }

        if (monthDiff = 0) {
            // Check Day
            let dateDiff = download_date.getDay() - birth_date.getDay();

            if (dateDiff <= 0) {
                return "Eligible"
            } else {
                return "Not Eligible"
            }
        }
    }
}

let dob_string = "DOB: 14/09/2016";
let dl_string = "Download Date: 03/11/2020";

let dob = new Date(dob_string.substr(dob_string.indexOf("DOB:") + 4, 11).trim());
let dld = new Date(dl_string.substr(dl_string.indexOf("Download") + 14, 11).trim());

console.log(checkDate(dob,dld)); 
功能检查日期(出生日期、下载日期){
让yearDiff=下载_date.getFullYear()-出生_date.getFullYear();
控制台日志(yearDiff);
如果(yearDiff>5)返回“不合格”;
如果(年差<5)返回“合格”;
如果(年差==5){
//仅在5年或5年以下时合格
//如果差异为5年,请检查Bday是否在下载日期?
//第一个检查月
让monthDiff=download_date.getMonth()-birth_date.getMonth();
如果(monthDiff>=1){
返回“不合格”
}

如果(monthDiff那么我测试了它,甚至子字符串也创建了无效日期。 所以我写了这封信给你:

功能检查日期(出生日期、下载日期){
让yearDiff=下载_date.getFullYear()-出生_date.getFullYear();
控制台日志(yearDiff);
如果(yearDiff>5)返回“不合格”;
如果(年差<5)返回“合格”;
如果(年差==5){
//仅在5年或5年以下时合格
//如果差异为5年,请检查Bday是否在下载日期?
//第一个检查月
让monthDiff=download_date.getMonth()-birth_date.getMonth();
如果(monthDiff>=1){
返回“不合格”
}

if(monthDiff问题在于
新日期
构造函数
dd/mm/yyyy
格式,并且在不同浏览器上实现不同。您需要做的是将其转换为有效格式。 一种方法是将其拆分并传递到构造函数中,如下所示:

let dob_string = "DOB: 14/09/2016";
let dl_string = "Download Date: 03/11/2020";
let dob = dob_string.substr(dob_string.indexOf("DOB:") + 4, 11).trim();
const splitDOB = dob.split('/')
const validDate = new Date(
  parseInt(splitDOB[2], 10),
  parseInt(splitDOB[1], 10) - 1,
  parseInt(splitDOB[0], 10)
);
第二个参数中的
-1
是因为月份是。然后您可以使用自己函数的逻辑进行处理。
但我强烈建议使用第三方库,例如在JS中处理日期/时间时,这可能与您的问题没有多大关系,但是如果`如果(monthDiff=0){`看起来不正确,如果您正在传递
“DOB:14/09/2016”
日期
,那么问题可能就在这里。
新日期(“DOB:14/09/2016”)
绝对无效。@nibble你检查了整个代码了吗?我想你没有检查。我正在使用子字符串从字符串中提取日期。@RenéDatenschutz哇哇!!谢谢空处理是怎么回事?如果字符串不包含所需的模式,程序将崩溃。只有模式匹配,isNan才会工作。