Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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_Validation_Types - Fatal编程技术网

Javascript 正在验证传入的值是否可以转换为日期

Javascript 正在验证传入的值是否可以转换为日期,javascript,validation,types,Javascript,Validation,Types,我有一个文本框,用户应该在其中输入格式为mm/dd/yyyy的日期。我正在努力确保情况是这样,并且它们不会以字符串形式传递。由于我在下面的代码中使用了new Date(),我可以理解startDate/endDate是日期,即使它们是无效的。。。所以基本上我在寻找正确的方法来进行验证 function calculate() { var start = document.getElementById("start").value; var end = document.get

我有一个文本框,用户应该在其中输入格式为mm/dd/yyyy的日期。我正在努力确保情况是这样,并且它们不会以字符串形式传递。由于我在下面的代码中使用了new Date(),我可以理解startDate/endDate是日期,即使它们是无效的。。。所以基本上我在寻找正确的方法来进行验证

  function calculate() {
    var start = document.getElementById("start").value;
    var end = document.getElementById("end").value;
    var startDate = new Date(Date.parse(start));
    var endDate = new Date(Date.parse(end));
    var daysBetween = parseInt((endDate - startDate)/(24*3600*1000));
    var er = document.getElementById("errorResult");

    if(!(startDate instanceof Date) || !(endDate instanceof Date)) {
        er.innerHTML = "Dates must be of the form mm/dd/yyyy";
        return;
    } else if (endDate<startDate) {
        er.innerHTML = "End date must be after start date!";
        return;
    } else {
        er.innerHTML = "";
    }
函数计算(){
var start=document.getElementById(“start”).value;
var end=document.getElementById(“end”).value;
var startDate=新日期(Date.parse(start));
var endDate=新日期(Date.parse(end));
var daysBetween=parseInt((endDate-startDate)/(24*3600*1000));
var er=document.getElementById(“errorResult”);
如果(!(开始日期实例日期)| |!(结束日期实例日期)){
er.innerHTML=“日期的格式必须为mm/dd/yyyy”;
返回;
}else if(endDate使用正则表达式

if (!inputDate.match(/^\d{2}\/\d{2}\/\d{4}$/)) {
  er.innerHTML = "Dates must be of the form mm/dd/yyyy";
  return;
}
使用正则表达式

if (!inputDate.match(/^\d{2}\/\d{2}\/\d{4}$/)) {
  er.innerHTML = "Dates must be of the form mm/dd/yyyy";
  return;
}
你可以试试这个

function isValidDate(date)
{
    var matches = /^(\d{2})[-\/\.](\d{2})[-\/\.](\d{4})$/.exec(date);
    if (matches == null) return false;
    var d = matches[2], m = matches[1], y = matches[3];
    var newDate = new Date(y, m, d);
    return newDate.getDate() == d && newDate.getMonth() == m && newDate.getFullYear() == y;
}
在函数中,可以检查

var start = document.getElementById("start").value;
var end = document.getElementById("end").value;
if ( isValidDate( start ) && isValidDate( end ) )
{
    // valid
}
你可以试试这个

function isValidDate(date)
{
    var matches = /^(\d{2})[-\/\.](\d{2})[-\/\.](\d{4})$/.exec(date);
    if (matches == null) return false;
    var d = matches[2], m = matches[1], y = matches[3];
    var newDate = new Date(y, m, d);
    return newDate.getDate() == d && newDate.getMonth() == m && newDate.getFullYear() == y;
}
在函数中,可以检查

var start = document.getElementById("start").value;
var end = document.getElementById("end").value;
if ( isValidDate( start ) && isValidDate( end ) )
{
    // valid
}

这并不能直接回答您的问题,但如果您有选择,我建议您在进行大量日期操作/格式化/验证时使用moment.js:坚持使用两位数的日期和月份值很烦人,您应该接受2013年5月4日和2013年5月4日。我同意我的计划,但只是一般性地问了这个问题这并不能直接回答你的问题,但如果你有选择的话,我建议你在进行大量的日期操作/格式化/验证时使用moment.js:坚持使用两位数的日和月值是令人讨厌的,你应该接受2013年4月5日和2013年4月5日。我同意我的计划,但只是问问题请注意,OP使用的是美国特有的月/日/年格式,您的代码假定为日/月/年。还要注意,2013年5月4日在两个系统中都是“有效”日期,但表示不同的日期,您可能希望包含“.”作为分隔符。最后,要验证日期,您只需要测试任意两个值(例如,日期和月份),不是全部三个。但这并不有害。:-@RobG,非常感谢您为我指出日期格式和提示:-)请注意,OP使用的是特殊的美国月/日/年格式,您的代码假定为日/月/年。还请注意,2013年5月4日是“有效”的日期在两个系统中,但表示不同的日期,您可能希望包含“.”作为分隔符。最后,要验证日期,您只需要测试任意两个值(例如日期和月份),而不是全部三个值。但这不会造成任何伤害。:-@RobG,非常感谢您为我指出日期格式和提示:-)