在jquery datepicker中计算国家法定假日和周末

时间:2015-03-27 05:51:17

标签: javascript jquery jquery-ui datepicker jquery-ui-datepicker

我遇到了问题"如何计算除周末(SAT,SUN)和国家假日之外的日期之间的日期。"并且真的很难同时计算周末和国庆节假期。

任何帮助都将受到严重赞赏。

我已经在我的代码中得出结论,我得到了计算的日子,我可以排除周末,但不是国家法定假日,我试图建立但失败了。请让我知道如何同时计算周末和国定假日。

这是我的HTML代码:

<label>Leave From</label>
                <input name="from" id="from" type="text" class="form-control" value="" / >
              </div>
              <div class="form-group" id="to_date">
                <label>To</label>
                <input name="to" id="to" type="text" class="form-control" >
              </div>
              <input type="text" id="hasil" name="hasil" readonly />

这是我的剧本:

<script>
  var disabledDays = ["3-24-2015", "3-25-2015"];

   function nationalDays(date) {
       var m = date.getMonth(),
           d = date.getDate(),
           y = date.getFullYear();

       for (i = 0; i < disabledDays.length; i++) {
           if ($.inArray((m + 1) + '-' + d + '-' + y, disabledDays) != -1 || new Date() > date) {
               return [false];
           }
       }
       return [true];
   }

   function noWeekendsOrHolidays(date) {
       var noWeekend = jQuery.datepicker.noWeekends(date);
       return noWeekend[0] ? nationalDays(date) : noWeekend;
   }

   $(function () {
       $("#from").datepicker({
           minDate:0,
           changeMonth: true,
           constrainInput: true,
           numberOfMonths: 1,
           beforeShowDay: $.datepicker.noWeekends,
           onSelect: calculateDays,
           onClose: function (selectedDate) {
               var day = $("#from").datepicker('getDate');
               $("#to").datepicker("option", "minDate", selectedDate);
           },
       }).on("changeDate",function(ev){
      var fromdate = new Date(ev.date);
      fromdate.setMonth(fromdate.getMonth()+1);

      var finaldate = fromdate.getFullYear()+"-"+fromdate.getMonth()+"-"+fromdate.getDate();
      console.log(finaldate);
      $("#fromdate").val(finaldate);
   });

     });

   $(function () {
       $("#to").datepicker({
          minDate:0,
         beforeShowDay: $.datepicker.noWeekends,
           changeMonth: true,
           constrainInput: true,
           numberOfMonths: 1,
           onSelect: calculateDays,
           onClose: function (selectedDate) {
               $("#from").datepicker("option", "maxDate", selectedDate);
           },
       }).on("changeDate",function(ev){
      var todate = new Date(ev.date);
      todate.setMonth(todate.getMonth()+1);

      var finaldate = todate.getFullYear()+"-"+todate.getMonth()+"-"+todate.getDate();
      console.log(finaldate);
      $("#todate").val(finaldate);
   });

   });

   function calculateDays(startDate, endDate) {
       var form = this.form

       var startDate = document.getElementById("from").value;
       var startDate = new Date(startDate);

       var endDate = document.getElementById("to").value;
       var endDate = new Date(endDate);

       startDate.setHours(0, 0, 0, 1); // Start just after midnight
       endDate.setHours(23, 59, 59, 999); // End just before midnight

       var oneDay = 24 * 60 * 60 * 1000;
       var diff = endDate - startDate; // Milliseconds between datetime objects
       var days = Math.ceil(diff / oneDay);

       var weeks = Math.floor(days / 7);
       var days = days - (weeks * 2);

       // Handle special cases
       var startDay = startDate.getDay();
       var endDay = endDate.getDay();

       // Remove weekend not previously removed.
       if (endDate < startDate) {
           return 0;
       }

       if (startDay - endDay > 1) days = days - 2;




       if (days) document.getElementById("hasil").innerHTML = days;
       $("#hasil").val(days);

   }


</script>

以下是jsfiddle的链接:https://jsfiddle.net/8ww4noja/2/

0 个答案:

没有答案