以下代码未按预期运行。
$(document).ready(function() {
$('#txtDateIssued').datepicker({
altField: "#txtDateExpires",
dateFormat: 'dd/mm/yy',
onSelect: function(dateStr) {
var d = $.datepicker.parseDate('dd/mm/yy', dateStr);
d.setFullYear(d.getFullYear() + 1);
$('#txtDateExpires').datepicker('setDate', d);
}
});
});
我们需要将altField
和+1年添加到所选日期并显示在altField
中,而不是另一个带有datepicker的输入。原因是我们不希望用户可以访问/编辑添加的年份,并且没有此日期的日期选择器。只是1年的信息显示。
Jsfiddle在这里:
答案 0 :(得分:1)
将您的onSelect
更改为setDate
而不是setFullYear
,并将365天添加到当前所选的date
,如下所示。此外,我认为您不需要在第二个datepicker
初始化input
,除非您使用它。
onSelect: function(dateStr) {
var d = $.datepicker.parseDate('dd/mm/yy', dateStr);
d.setDate(d.getDate() + 365); //setDate and getDate+365
var dd = d.getDate();
var mm = d.getMonth() + 1;
var y = d.getFullYear();
var someFormattedDate = dd + '/' + mm + '/' + y;
$('#txtDateExpires').val(someFormattedDate);
}
<强> 强>
Working DEMO
强>
注意 - 您也可以删除
altField
属性作为初始化选项的一部分,因为您现在不需要它。感谢Rory McCrossan
提出的建议
更新答案以照顾闰年
onSelect: function(dateStr) {
var d = $.datepicker.parseDate('dd/mm/yy', dateStr);
var isLeap = new Date(d.getFullYear()+1, 1, 29).getMonth() == 1 && d.getMonth()+1!=2; //check for leap year and month.
var days=isLeap?(365+1):365;
d.setDate(d.getDate() + days);
var dd = d.getDate();
var mm = ('00' + (d.getMonth() + 1)).slice(-2);
var y = d.getFullYear();
var someFormattedDate = dd + '/' + mm + '/' + y;
$('#txtDateExpires').val(someFormattedDate);
}
<强> 强>
Updated Working DEMO
强>
答案 1 :(得分:1)
感谢您的回复。下面的代码非常完美。希望它能帮助其他人解决同样的问题:
$(document).ready(function() {
$('#txtDateIssued').datepicker({
altField: "#txtDateExpires",
dateFormat: 'dd/mm/yy',
onSelect: function(dateStr) {
var d = $.datepicker.parseDate('dd/mm/yy', dateStr);
d.setFullYear(d.getFullYear() + 1);
dateFormatted = ('0' + d.getDate()).slice(-2) + '/'
+ ('0' + (d.getMonth()+1)).slice(-2) + '/'
+ d.getFullYear();
$('#txtDateExpires').val(dateFormatted);
}
});
});