JQuery-未捕获的TypeError:startDate.getDate不是函数 [英] JQuery - Uncaught TypeError: startDate.getDate is not a function

查看:22
本文介绍了JQuery-未捕获的TypeError:startDate.getDate不是函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用JQuery-UI Datepicker,我尝试从开始日期(开始日期)和不包括节假日和周末的休假天数计算恢复日期(结束日期)。当#Leave_Days为onkeyup时会触发此事件。

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
<input type="text" id="commencement_date" class="form-control commencement_date" placeholder="dd/mm/yyyy" readonly autocomplete="off" name="commencement_date">
<input type="text" id="leave_days" name="no_of_days" class="form-control no_of_days" placeholder="e.g. 10" maxlength="3" onkeyup="checkScore(this.value)">
<input type="text" id="resumption_date" class="form-control resumption_date" placeholder="dd/mm/yyyy" readonly autocomplete="off" name="resumption_date">

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
< script type = "text/javascript" >
  $(document).ready(function() {
    $("#leave_days").on('keyup blur', function(e) {
      var periodval = parseInt($("#leave_days").val());
      holidayDays = holidayDays;
      console.log(holidayDays);;
      var startDate = $('.commencement_date');
      var endDate = $('.resumption_date');
      var dte = startDate.datepicker("getDate");
      dte.setDate(dte.getDate() + periodval);
      endDate.datepicker("setDate", dte);

      for (i = 0; i < holidayDays.length; i++) {
        var date = endDate.getDate();
        var month = endDate.getMonth() + 1; //Months are zero based
        var year = endDate.getFullYear();
        if ((year + '-' + month + '-' + date) === (holidayDays[i])) {
          endDate = new Date(endDate.setDate(endDate.getDate() + 1));
          endDate.datepicker("setDate", dte);
          if (endDate.getDay() == 6) {
            endDate = new Date(endDate.setDate(endDate.getDate() + 2));
          } else if (endDate.getDay() == 0) {
            endDate = new Date(endDate.setDate(endDate.getDate() + 1));
          }
        }
      }

    });

    $('.commencement_date').datepicker({
      dateFormat: 'dd-mm-yy',
      changeMonth: true,
      changeYear: true,
      showAnim: 'slideDown',
      duration: 'fast',
      minDate: +1,
      setDate: new Date(),
      beforeShowDay: $.datepicker.noWeekends,
      yearRange: new Date().getFullYear() + ':' + new Date().getFullYear(),
    }).datepicker('setDate', '1');

    $('.resumption_date').datepicker({
      dateFormat: 'dd-mm-yy',
      changeMonth: true,
      changeYear: true,
      showAnim: 'slideDown',
      duration: 'fast',
      minDate: +1,
      beforeShowDay: $.datepicker.noWeekends,
      yearRange: new Date().getFullYear() + ':' + new Date().getFullYear(),
      enableOnReadonly: true,
      beforeShow: function(i) {
        if ($(i).attr('readonly')) {
          return false;
        }
      }
    });
  }); <
/script>

我想根据给定的天数(Leave_Days)和Start_Date(StartDate)来查找Resume_Date(EndDate)。它应该不包括周末和节假日。

节假日就是节假日

假日天数=[2020年11月12日,2020年11月16日,2020年11月30日,2020年12月14日,2020年12月10日]

当#Leave_Days on Keyup时,我收到以下错误:

未捕获的TypeError:startDate.getDate不是函数

如何解决此问题?

推荐答案

游戏延迟。

问题和关注事项

从附加的代码中,我没有看到任何startDate.getDate(),但endDate.getDate()

您会收到此错误,因为endDate不是日期变量,但它是对象,HtmlInputElement

因此,您的错误消息应该是:

未捕获的TypeError:endDate.getDate不是函数

而不是:

未捕获的TypeError:startDate.getDate不是函数


解决方案

将日期变量的endDate更改为dte

推荐:

您可以定向setDatefordte,而无需重新创建Date实例。

dte.setDate(dte.getDate() + 1);

而不是:

dte = new Date(dte.setDate(dte.getDate() + 1));
$('#leave_days').on('keyup blur', function(e) {
    var periodval = parseInt($('#leave_days').val());
    holidayDays = holidayDays;
    console.log(holidayDays);
    var startDate = $('.commencement_date');
    var endDate = $('.resumption_date');
    var dte = startDate.datepicker('getDate');
    dte.setDate(dte.getDate() + periodval);
    endDate.datepicker('setDate', dte);

    for (var i = 0; i < holidayDays.length; i++) {
      var date = dte.getDate();
      var month = dte.getMonth() + 1; //Months are zero based
      var year = dte.getFullYear();

      if (year + '-' + month + '-' + date === holidayDays[i]) {
        dte.setDate(dte.getDate() + 1);
        endDate.datepicker('setDate', dte);

        if (dte.getDay() == 6) {
          dte.setDate(dte.getDate() + 2);
          //endDate.datepicker('setDate', dte);
        } else if (dte.getDay() == 0) {
          dte.setDate(dte.getDate() + 1);
          //endDate.datepicker('setDate', dte);
        }
      }
    }
});

Sample solution on StackBlitz

这篇关于JQuery-未捕获的TypeError:startDate.getDate不是函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
其他开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆