繁体   English   中英

使用 JavaScript 验证以下日期格式 YYYYMMDD

[英]Validating the following date format YYYYMMDD using JavaScript

我正在尝试获取下一个日期的输入验证,但我没有得到正当理由。

我尝试使用 substring 使用月份和日期字段,但它没有按预期工作

if (result == null || result == "") {
  alert("no value");
} else if (!newCheck(newDate)) {
  alert("Not a valid date");
} else {
  alert("valid date");
}

function newCheck(input) {
  var yearfield = input.substring(0, 4);
  var monthfield = input.substring(4, 6);

  var dayobj = new Date(yearfield, monthfield - 1, '01');

  if ((dayobj.getMonth() + 1 != monthfield) || (dayobj.getFullYear() != yearfield)) {
    alert("Month" + monthfield);
    return false;
  } else {
    return true;
  }
}

如果输入 YYYYMMDD 日期,我的结果将返回 true。

Bravo 的答案也将验证日期,此答案将仅验证日期格式。 如果您只想使用YYYMMDD格式的日期,请使用此代码。 如果日期是20191010 ,您可以试试这个,那么它将返回 2019 年 10 月 10 日的日期,

    let str = "20191010";

    let year = str.substring(0,4);
    let month = str.substring(4,6);
    let day = str.substring(6,8);

    if(str.length === 8 && (parseInt(month) <= 12 && parseInt(month) >=1) && (parseInt(day)<=31 && parseInt(day)>=1) && parseInt(year)){

        if( parseInt(month)=='02' && parseInt(day)<=29){
            console.log('valid');           
            let date = new Date(year,String(parseInt(month)-1),day);
            console.log(date);  
        }
        else{
            console.log('invalid date')
        }



    }
    else{
        console.log('invalid date');
    }

以下工作 - 唯一if条件是原始格式是否为 8 位 - 所有其他验证基本上是通过 Date object 本身的方法完成的,因为在 javascript 中你可以做“愚蠢”的事情new Date(2019, 99, 99)不引起异常

8 位数字的验证以构造日期等于输入日期为条件 - new Date(2019, 99, 99) === 2028-06-07T00:00:00.000Z因此验证失败

2019-99-99T00:00:00.000Z !== 2028-06-07T00:00:00.000Z

 function validDateString(s) { const match = s.match(/^(\d{4})(\d\d)(\d\d)$/); if (match) { const [year, month, day] = match.slice(1); const iso = `${year}-${month}-${day}T00:00:00.000Z`; const date = new Date(Date.UTC(year, month - 1, day)); return date.toISOString() === iso; } return false; } console.log(validDateString('20200231')); console.log(validDateString('20200228')); console.log(validDateString('20209999'));

你能试试这个正则表达式吗:

^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$

var isValid = /^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$/.test(inputField.value);

你可以使用 momentjs

if (!moment(dateEntered,'MM-DD-YYYY').isValid()) 
{ 
    console.log('Invalid Date'); 
} 
else 
{ 
    console.log('Valid Date');
}

https://codepen.io/jay3dec/pen/sKqeh/

对于您的场景

if (!moment(dateEntered,'YYYYMMDD').isValid()) 
{ 
    console.log('Invalid Date'); 
} 
else 
{ 
    console.log('Valid Date');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM