支持多种格式的jQuery日期选择器
我想知道是否有人可以推荐一个插件或解决方案,让我可以同时使用jQuery datepicker插件和多种输入日期格式。这将允许用户以任何指定格式输入日期。即:支持多种格式的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”似乎接受多种格式。我对您提供的三种格式进行了快速测试,所有人似乎都接受了 演示:
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文件中添加您的代码并修改它吗?亚历克斯,谢谢你花了这么长时间回答你的问题,但如果有人还在考虑这个决定,我不会修改你的库源文件,除非作为最后手段。当一个方法被公开时,就像这个方法一样,只需在你自己的代码中覆盖它。根据备注写下更新的答案,见下文。