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缺失。这可以修复吗?@sitedevcode
var mm=('00'+(d.getMonth()+1)).slice(-2)@Guruprasad Rao:干得好!同样的问题是在一位数的日子里领先0。我试图用
vardd=('00'+(d.getDate.slice(-2))修复它但它破坏了逻辑。还有什么修正吗?@sitedevcode。。检查更新的工作演示!!如果答案有帮助,一定要接受。。