jQuery将;“阿尔特菲尔德”;带有+;所选日期增加1年
下面的代码未按预期工作jQuery将;“阿尔特菲尔德”;带有+;所选日期增加1年,jquery,datepicker,Jquery,Datepicker,下面的代码未按预期工作 $(document).ready(function() { $('#txtDateIssued').datepicker({ altField: "#txtDateExpires", dateFormat: 'dd/mm/yy', onSelect: function(dateStr) { var d = $.datepicker.parseDate('dd/mm/yy', dat
$(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
中,而不是使用日期选择器的另一个输入。原因是我们不希望用户可以访问/编辑添加的年份,也不希望该日期没有日期选择器。仅显示+1年的信息
请点击此处:
将您的
选择更改为setDate
,而不是setFullYear
,并将365天添加到当前选定的日期,如下所示。另外,我假设您不需要在第2次输入时初始化日期选择器
,除非您正在使用它
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);
}
注意-您也可以删除altField
属性作为初始化选项的一部分,因为您现在不需要它。感谢您的建议
更新答案以处理闰年问题
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);
}
谢谢您的回复。下面的代码工作正常。希望它能帮助其他人解决同样的问题:
$(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);
}
});
});
回答得不错,因为您包含了日期格式。请注意,由于闰年的原因,您不应该添加365天。在这方面,老年退休金计划最初的逻辑更好。您还可以删除altField
属性+1.regardless@GuruprasadRao:谢谢你的回答,但是它以一位数的格式显示月份。我们需要与2016年12月31日相同的格式进行匹配。如果月份小于10,则前导0缺失。这可以修复吗?@sitedevcodevar mm=('00'+(d.getMonth()+1)).slice(-2)代码>@Guruprasad Rao:干得好!同样的问题是在一位数的日子里领先0。我试图用vardd=('00'+(d.getDate.slice(-2))修复它代码>但它破坏了逻辑。还有什么修正吗?@sitedevcode。。检查更新的工作演示!!如果答案有帮助,一定要接受。。