这怎么可能在 ui-datepicker 中选择两位数的年份?当我尝试选择 24 年或 79 年时,它返回 1924 或 1979。如何正确选择两位数?
谢谢。
这怎么可能在 ui-datepicker 中选择两位数的年份?当我尝试选择 24 年或 79 年时,它返回 1924 或 1979。如何正确选择两位数?
谢谢。
提供日期格式参数:.datepicker({ dateFormat: 'dd-mm-y' })
(2 位 yeay = y,根据需要调整其余格式)
Datepicker 插件针对这种情况有一个特定的选项 - shortYearCutoff:
短年截止
确定日期世纪的截止年份(与
'y'
dateFormat 结合使用)。任何输入的年份值小于或等于截止年份的日期都被视为当前世纪,而大于它的日期则被视为上世纪。
它的默认值为'+10'(距离当前的十年,所以在2012年,填写的'22'将转换为'2022',但'23'最终为'1923')。
您可以在初始化日期选择器时提供 99(最大值),如下所示:
$( ".selector" ).datepicker({ shortYearCutoff: 99 });
... 使所有两个数字的年份都属于当前世纪。
在这种情况下,日期选择器不是很直观。
试试这个文档:
http://api.jqueryui.com/1.8/datepicker/#option-dateFormat
将日期格式的年份部分设置为仅 y 而不是 yy
$(selector).datepicker({ dateFormat: 'dd.mm.y' })
添加ShortearCutoff选项仅在仅通过按钮激活Picker窗口('Showon:'button'),用户手动输入带有2位数年的日期,并且需要4位年的日期。
我最终将自己的更改事件附加到输入字段以处理日期格式,示例代码如下所示。
还应注意,在此输入所在的表单上使用和配置了 jquery validate。datepicker 输入上的验证设置被配置为强制执行日期值。datepicker:{date: true} 这与配置为“mm/dd/yy”的 datepicker dateFormat 设置相结合,确保自定义 onchange 事件代码处理能够可靠地工作。
//datepicker
$( "#datepicker" ).attr("placeholder", "mm/dd/yyyy").change(function(){
// get the date value from the input field
var d = $(this).val();
// get the last 4 characters of the date value entered
var last4 = d.substr(-4);
// determine if the last 4 characters contain the character: /
if(last4.indexOf('/') > -1){
// yes there is a / character which means a two digit year was provided
// store the last two digits from the input string
var last2 = ((d.substr(-2))*1);
// remove the last two digits from the input string
d = d.slice(0,(d.length-2));
// prepend a 19 or 20 to the two digit year given based on a cutOff of 30
if(last2<=30){
d = d+'20'+last2;
}else{
d = d+'19'+last2;
}
}
// store/display the properly formated date
d = $.datepicker.parseDate('mm/dd/yy', d);
$(this).datepicker('setDate', d);
}).datepicker({
dateFormat: "mm/dd/yy",
shortYearCutoff: 30,
buttonImage: 'images/calendar_icon.png',
showOn: 'button'
});
Input values | onchange output results
--------------------------------------
07/04/2000 | 07/04/2000 (no change)
7/4/2000 | 07/04/2000
07/04/00 | 07/04/2000
07/4/00 | 07/04/2000
7/4/00 | 07/04/2000
7/4/30 | 07/04/2030
7/4/31 | 07/04/1931
07/04/2031 | 07/04/2031 (no change)
07/04/1931 | 07/04/1931 (no change)
不适用于 2000 年的 2 位数字,例如“09”变为“9”,然后注册年份为“209”
这段代码处理它:
// get the date value from the input field
var d = $(this).val();
// get the last 4 characters of the date value entered
var last4 = d.substr(-4);
// determine if the last 4 characters contain the character: /
if (last4.indexOf('/') > -1) {
// yes there is a / character which means a two digit year was provided
// store the last two digits from the input string
var last2 = ((d.substr(-2)) * 1);
// remove the last two digits from the input string
d = d.slice(0, (d.length - 2));
// prepend a 19 or 20 to the two digit year given based on a cutOff
// of 30
if (last2 <= 30) {
if (last2 < 10) {
d = d + '200' + last2;
} else {
d = d + '20' + last2;
}
} else {
if (last2 < 10) {
d = d + '190' + last2;
} else {
d = d + '19' + last2;
}
}
}
上面的修改代码基本上基于当前日期进行缩放,以使用最接近当前年份的年份并处理 1 位数年份并忽略年份的 3 位数:
.on("change",function(){
var d = $(this).val();
var last3 = d.substr(-3);
// determine if the last 3 characters contain the character: /
if(last3.indexOf('/') > -1){
var currentYearStr=(new Date()).getFullYear().toString();
var currentCentury=(currentYearStr.substr(0,2)*1);
var last2 = (d.substr(-2));
// determine if the last 2 characters contain the character: /
if(last2.indexOf('/') > -1) {
// determine which century, within 50 years of the current year, to prepend and prepend that and decade 0 to the 1 digit year:
var last = (d.substr(-1)*1);
var yeardiff=(currentYearStr.substr(-2)*1)-last;
if (yeardiff>50) currentCentury++;
d = d.slice(0,(d.length-1));
d = d+currentCentury.toString()+'0'+last;
} else {
// determine which century, within 50 years of the current year, to prepend and prepend that to the 2-digit year:
last2=last2*1;
var yeardiff=(currentYearStr.substr(-2)*1)-last2;
if (yeardiff>50) currentCentury++;
else if (yeardiff<-50) currentCentury--;
d = d.slice(0,(d.length-2));
d = d+currentCentury.toString()+last2;
}
// store/display the properly formated date
d = $.datepicker.parseDate('mm/dd/yy', d);
$(this).datepicker('setDate', d);
}
});
把它放在你的日期选择器初始化中
"dateFormat": "yy-mm-dd"