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

使用JavaScript验证以下日期格式YYYYMMDD,javascript,Javascript,我正在尝试获取下一个日期的输入验证,但找不到有效的原因 我尝试使用子字符串来使用月份和日期字段,但它没有按预期工作 if (result == null || result == "") { alert("no value"); } else if (!newCheck(newDate)) { alert("Not a valid date"); } else { alert("valid date");

我正在尝试获取下一个日期的输入验证,但找不到有效的原因

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

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。

请尝试此正则表达式:

^([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)

布拉沃的答案也将验证日期,此答案仅验证日期格式。如果您只想使用
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');
    }
let str=“20191010”;
设年份=str.substring(0,4);
设月=str.substring(4,6);
let day=str.substring(6,8);
如果(str.length==8&&(parseInt(月)=1)&&(parseInt(日)=1)&&parseInt(年)){

if(parseInt(month)='02'&&parseInt(day)以下方法有效-唯一的
if
条件是原始格式是否为8位-所有其他验证基本上由Date对象本身的方法完成,因为在javascript中,您可以在不引起异常的情况下执行“愚蠢”的事情
新日期(2019、99、99)

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

2019-99-99T00:00:00.000Z !== 2028-06-07T00:00:00.000Z
功能有效性测试环{
const match=s.match(/^(\d{4})(\d\d)(\d\d)$/);
如果(匹配){
常量[年、月、日]=匹配切片(1);
常量iso=`${year}-${month}-${day}T00:00:00.000Z`;
const date=新日期(date.UTC(年、月-1日));
返回日期。toISOString()==iso;
}
返回false;
}
console.log(validDateString('20200231');
console.log(validDateString('20200228'));

log(validDatastring('20209999');
您可以使用momentjs来实现这一点

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

针对您的场景


Java!==Javascript请在提交问题之前花一些时间正确格式化代码。看起来您的验证HHMMSS时间不是YYYYMMDD日期
parseInt(天)更新以处理上述情况20190431还有,20190229将无效。根据问题,他想验证日期格式
YYYYMMDD
,而不是日期是否有效。
dateented,'MM-DD-yyyyy'
…但格式是yyyyymmdd
if (!moment(dateEntered,'YYYYMMDD').isValid()) 
{ 
    console.log('Invalid Date'); 
} 
else 
{ 
    console.log('Valid Date');
}