Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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_Date_Input_Format_Interpreter - Fatal编程技术网

在JavaScript中解释用户输入的日期

在JavaScript中解释用户输入的日期,javascript,date,input,format,interpreter,Javascript,Date,Input,Format,Interpreter,我正在寻找一种方便的方法来获取用户输入的日期并执行以下操作: 1) 确定输入的日期是否有效,如果有效,则返回包含以下内容的对象: 2) JavaScript日期对象 3) 以mySQL格式格式化的日期(YYYY-MM-DD) 4) 以典型格式(MM-DD-YYYY)格式化的日期 最后,我编写了自己的函数,该函数使用正则表达式,可以处理YYYY-MM-DD、YYYY/MM/DD、MM-DD-YY、MM/DD/YY、MM-DD-YYYY或MM/DD/YYYY的输入 函数在对象中返回mySQL格式和常

我正在寻找一种方便的方法来获取用户输入的日期并执行以下操作:

1) 确定输入的日期是否有效,如果有效,则返回包含以下内容的对象:

2) JavaScript日期对象

3) 以mySQL格式格式化的日期(YYYY-MM-DD)

4) 以典型格式(MM-DD-YYYY)格式化的日期

最后,我编写了自己的函数,该函数使用正则表达式,可以处理YYYY-MM-DD、YYYY/MM/DD、MM-DD-YY、MM/DD/YY、MM-DD-YYYY或MM/DD/YYYY的输入

函数在对象中返回mySQL格式和常规格式的原因只是为了方便。我的web应用程序需要在字段中显示典型格式,在保存数据时需要将mysQL格式发送到服务器

我的答案中显示了代码。我确信有一些方法可以优化代码,但为了便于阅读,我编写了部分代码。即使将它设置为每次用户在日期字段中输入数据时都运行,它也不会使任何事情陷入困境。希望这对某人有帮助

更新:更好

代码和示例可以在这里看到

函数解释日期(stringDate){
var mysqlF=“(\\d{4})[-/](\\d{1,2})[-/](\\d{1,2})”;
var dispF=“(\\d{1,2})[-/](\\d{1,2})[-/]((?:\\d{4})|(?:\\d{2}))”;
var dispNoYearF=“(\\d{1,2})[-/](\\d{1,2})”;
var dateFormats=“(^“+mysqlF+”$)|(^“+dispF+”$)|(^“+dispnoyerf+”$)”;
//让我们试着提取数据
数据=stringDate.match(日期格式);
风险值月份=-1;
var日=-1;
风险值年份=-1;
//检查验证是否失败
如果(数据==未定义){
//无效日期
返回{valid:false,date:null,mysqlDate:null,displayDate:”“};
}
//根据条目类型提取数据
如果(数据[1]!=未定义){//YYYY-MM-DD
月=parseInt(数据[3]);
day=parseInt(数据[4]);
年份=parseInt(数据[2]);
}如果(数据[5]!=未定义){//MM-DD-YYYY或MM-DD-YY
月=parseInt(数据[6]);
day=parseInt(数据[7]);
年份=parseInt(数据[8]);
如果(年份<100){
var yearString=新字符串(new Date().getFullYear());
year=parseInt(yearString.substr(0,2)+year);
}
}如果(数据[9]!=未定义){//MM-DD
月=parseInt(数据[10]);
day=parseInt(数据[11]);
year=parseInt(新日期().getFullYear());
}
//如果我们在这里,我们有三个数字,让我们看看他们是否真的有约会
var extractedDate=新日期(年、月1日);
如果(extractedDate.getFullYear()!=年| | extractedDate.getDate()!=天| | extractedDate.getMonth()!=(第1个月)){
返回{valid:false,date:null,mysqlDate:null,displayDate:”“};
}
//我们有一个有效的日期,让我们加上前面的零
var monthFixed=月份;
如果(monthFixed<10)monthFixed=“0”+monthFixed;
var dayFixed=天;
如果(dayFixed<10)dayFixed=“0”+dayFixed;
//我们完了
返回{valid:true,date:extractedDate,mysqlDate:year+“-”+monthFixed+“-”+dayFixed,displayDate:month+“/”+day+“/”+year};
}
function interpretDate(stringDate){
    var mysqlF = "(\\d{4})[-/](\\d{1,2})[-/](\\d{1,2})";
    var dispF = "(\\d{1,2})[-/](\\d{1,2})[-/]((?:\\d{4})|(?:\\d{2}))";
    var dispNoYearF = "(\\d{1,2})[-/](\\d{1,2})";
    var dateFormats = "(^"+mysqlF+"$)|(^"+dispF+"$)|(^"+dispNoYearF+"$)";

    //Let's try to extract the data
    data = stringDate.match(dateFormats);
    var month = -1;
    var day = -1;
    var year = -1;

    //Check to see if the verification failed
    if (data == undefined){
        //Invalid date
        return {valid: false, date: null, mysqlDate:null, displayDate: ""};
    }

    //Extract the data based on the entry type
    if (data[1] != undefined){//YYYY-MM-DD
        month = parseInt(data[3]);
        day = parseInt(data[4]);
        year = parseInt(data[2]);
    }else if (data[5] != undefined){//MM-DD-YYYY or MM-DD-YY
        month = parseInt(data[6]);
        day = parseInt(data[7]);
        year = parseInt(data[8]);
        if (year < 100){
            var yearString = new String(new Date().getFullYear());
            year = parseInt(yearString.substr(0,2) + year);
        }
    }else if (data[9] != undefined){//MM-DD
        month = parseInt(data[10]);
        day = parseInt(data[11]);
        year = parseInt(new Date().getFullYear());
    }

    //If we are here, we have three numbers, let's see if they make a real date
    var extractedDate = new Date(year, month-1, day);
    if (extractedDate.getFullYear() != year || extractedDate.getDate() != day || extractedDate.getMonth() != (month-1)){
        return {valid: false, date: null, mysqlDate:null, displayDate: ""};
    }

    //We have a valid date, let's add front zeros
    var monthFixed = month;
    if (monthFixed < 10) monthFixed = "0"+monthFixed;
    var dayFixed = day;
    if (dayFixed < 10) dayFixed = "0"+dayFixed;

    //We are done
    return {valid: true, date: extractedDate, mysqlDate:year+"-"+monthFixed+"-"+dayFixed, displayDate: month+"/"+day+"/"+year};
}