jQuery将“altField”与添加到选定日期的+1年相结合

时间:2016-06-15 07:49:56

标签: jquery datepicker

以下代码未按预期运行。

$(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在这里:

https://jsfiddle.net/2hn4hchk/

2 个答案:

答案 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);

         }

     });

 });

Working Demo