Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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
支持多种格式的jQuery日期选择器_Jquery_Jquery Plugins_Jquery Ui Datepicker - Fatal编程技术网

支持多种格式的jQuery日期选择器

支持多种格式的jQuery日期选择器,jquery,jquery-plugins,jquery-ui-datepicker,Jquery,Jquery Plugins,Jquery Ui Datepicker,我想知道是否有人可以推荐一个插件或解决方案,让我可以同时使用jQuery datepicker插件和多种输入日期格式。这将允许用户以任何指定格式输入日期。即: 3 31 10 3/31/2010 3-31-10 我真的不在乎用户签出后,值是否会被破坏为特定格式之一。一个好的输入屏蔽插件可能也适用于我的目的,但是,似乎期望每个字段都有一个固定的基数,这不起作用,因为我希望用户能够在3月份输入3或03,例如。这个“5”似乎接受多种格式。我对您提供的三种格式进行了快速测试,所有人似乎都接受了 演示:

我想知道是否有人可以推荐一个插件或解决方案,让我可以同时使用jQuery datepicker插件和多种输入日期格式。这将允许用户以任何指定格式输入日期。即:

3 31 10
3/31/2010
3-31-10

我真的不在乎用户签出后,值是否会被破坏为特定格式之一。一个好的输入屏蔽插件可能也适用于我的目的,但是,似乎期望每个字段都有一个固定的基数,这不起作用,因为我希望用户能够在3月份输入3或03,例如。

这个“5”似乎接受多种格式。我对您提供的三种格式进行了快速测试,所有人似乎都接受了


演示:

您可以尝试解释多种输入格式,并替换
模糊事件中的字符:

$("#datepicker").datepicker({
    constrainInput: false
}).blur(function() {
    var txt = $(this).val();
    $(this).val(txt.replace(/-| /g, '/'));
});

不幸的是,如果我在按下Enter键时找不到同样的方法。

这个问题已经有一段时间没有出现了,但是如果有人对使用更简单的jQueryUI日期选择器解决问题感兴趣,可以通过调整其parseDate方法来完成:

$.datepicker.inputFormats = ["dd-mm-yy", "dd/mm/yy", "dd mm yy"];//list formats to be accepted here

$.datepicker.originalParseDate = $.datepicker.parseDate;

$.datepicker.parseDate = function (format, value, settings) {
    var date;

    function testParse(format, value, settings) {
        if ( ! date ) {
            try {
                date = $.datepicker.originalParseDate(format, value, settings);
            } catch (Error) {
            }
        }
    }

    testParse(format, value, settings);
    for(var n = 0, stop = $.datepicker.inputFormats ? $.datepicker.inputFormats.length : 0; n < stop; n++){
        testParse($.datepicker.inputFormats[n], value, settings);
    };
    return date;
};
$.datepicker.inputFormats=[“dd-mm-yy”、“dd/mm/yy”、“dd-mm-yy”]//在此列出要接受的格式
$.datepicker.originalParseDate=$.datepicker.parseDate;
$.datepicker.parseDate=函数(格式、值、设置){
风险值日期;
函数testParse(格式、值、设置){
如果(!日期){
试一试{
日期=$.datepicker.originalParseDate(格式、值、设置);
}捕获(错误){
}
}
}
testParse(格式、值、设置);
对于(var n=0,stop=$.datepicker.inputFormats?$.datepicker.inputFormats.length:0;n
Cage Cratter回答说,您可以覆盖jquery datepicker函数parseDate以支持多种格式。(由于声誉问题,我无法发表评论,但无论如何都需要添加此信息)

我发现如果要将datepicker中的format变量设置为格式列表,还需要重写formatDate和_possibleChars函数。datepicker不需要列表(在我的例子中是JSON),您必须解决这个问题


也考虑如果你不重写这两个,它们就不会像预期的那样运行。例如,您将无法键入自定义格式列表中的字符(除了存储在日期选择器本身中的第一种格式)。

改进了@cage Crattler的解决方案,尤其是基于@mnsc的备注:

// Accepted additional formats [here, allow for example "4/7/18" for "July 4, 2018"]
$.datepicker.additionalFormats = ["ddmmy", "ddmmyy", "d/m/y", "d/m/yy", "d/mm/y", "dd/m/y", "dd/m/yy", "dd/mm/y"];
// Backup the original parsing function
$.datepicker.originalParseDate = $.datepicker.parseDate;
// New parsing function
$.datepicker.parseDate = function (format, value, settings) {
    // Function that returns a date based on an input format
    function testParse(inputFormat) {
        try {
            // Try to get the date based on the input format
            date = $.datepicker.originalParseDate(inputFormat, value, settings);
            // If the date is right, returns it immediately
            return date;
        }
        catch (Error) {
            // _RD Bad date (this line does nothing but catching the error)
        }
    }
    // Initialise the returned date
    var date;
    // Don't bother with empty values
    if (value !== "0" && value !== "") {
        // Test the main datepicker format (which is an argument of this function)
        testParse(format);
        // If the main datepicker format didn't work, try with the additional ones
        for (var n = 0; n < $.datepicker.additionalFormats.length; n++) {
            testParse($.datepicker.additionalFormats[n]);
        }
    }
    // If the input string couldn't be parsed, returns just the "undefined"-typed variable
    return date;
};
//接受的其他格式[此处,允许例如“2018年7月4日”的“4/7/18”]
$.datepicker.additionalFormats=[“ddmmy”、“ddmmyy”、“d/m/y”、“d/m/yy”、“d/mm/y”、“dd/m/y”、“dd/m/yy”];
//备份原始解析函数
$.datepicker.originalParseDate=$.datepicker.parseDate;
//新的解析函数
$.datepicker.parseDate=函数(格式、值、设置){
//基于输入格式返回日期的函数
函数testParse(inputFormat){
试一试{
//尝试根据输入格式获取日期
日期=$.datepicker.originalParseDate(输入格式、值、设置);
//如果日期正确,则立即返回
返回日期;
}
捕获(错误){
//_RD Bad date(此行只捕获错误)
}
}
//初始化返回的日期
风险值日期;
//不要为空值而烦恼
如果(值!=“0”&&value!=“0”){
//测试主日期选择器格式(此函数的参数)
testParse(格式);
//如果主日期选择器格式不起作用,请尝试使用其他格式
对于(var n=0;n<$.datepicker.additionalFormats.length;n++){
testParse($.datepicker.additionalFormats[n]);
}
}
//如果无法解析输入字符串,则只返回“未定义”类型的变量
返回日期;
};

此外,如果您想在离开该字段时重新格式化输入,请参阅我在这里对本主题的回答:

为什么jQueryUI日期选择器日期格式不适合您?我希望用户能够以各种格式输入日期,我不在乎是哪种格式,也不希望他们必须提前指定。dateFormat只接受一种格式。行
testParse(格式、值、设置)
表示首先测试原始日期格式,然后测试所有
输入格式
?如果是这样的话,
inputFormats
应该被称为
additionalFormats
?你让我开心了!非常感谢。你还可以添加用法吗。我应该在jQueryUI文件中添加您的代码并修改它吗?亚历克斯,谢谢你花了这么长时间回答你的问题,但如果有人还在考虑这个决定,我不会修改你的库源文件,除非作为最后手段。当一个方法被公开时,就像这个方法一样,只需在你自己的代码中覆盖它。根据备注写下更新的答案,见下文。