Javascript 国家假日排除在JQuery中不起作用

Javascript 国家假日排除在JQuery中不起作用,javascript,jquery-ui,jquery-ui-datepicker,Javascript,Jquery Ui,Jquery Ui Datepicker,我正在使用jQueryUIDatePicker和Laravel-5.8 从控制器,我将NationalHoliday作为JSON发送到视图 public function findNationalHoliday(Request $request) { $nationalholidays = HrNationalHoliday::select('holiday_date')->whereYear('created_at', '=', date('Y'))-&

我正在使用jQueryUIDatePicker和Laravel-5.8

从控制器,我将NationalHoliday作为JSON发送到视图

public function findNationalHoliday(Request $request)
{
   $nationalholidays               = HrNationalHoliday::select('holiday_date')->whereYear('created_at', '=', date('Y'))->get();
 return response()->json([
    'nationalholidays' => $nationalholidays,
 ]);        
} 
javascript


var holidayDays=[];
$(文档).ready(函数(){
$(文档).on('change','left_type',function(){
var air_id=$(this.val();
var a=$(this.parent();
var op=“”;
$.ajax({
键入:“get”,
url:“{{route('
get.leavecounts.all')}}',
数据:{
“id”:air\u id
},
dataType:'json',//返回的数据将是json
成功:功能(数据){
holidayDays=data.nationalholidays;
console.log(data.nationalholidays);
},
错误:函数(){
}
});
});
});

考虑如下示例:

  function nationalDays(date) {
    // Convert Date Object to String per Format
    var myDate = $.datepicker.formatDate("yy-mm-dd", date) + " 00:00:00";
    // Check for Date in Array
    var needle = holidayDays.indexOf(myDate);
    // Set Default
    var result = [true];
    // If Needle was found, make exception
    if (needle >= 0) {
      result = [false, "holiday", "National Holiday"];
    }
    // Return Results
    return result;
  };
请参阅更多:

$.datepicker.formatDate(格式、日期、选项)

将日期格式化为具有指定格式的字符串值

上面的示例需要一个字符串数组。您似乎正在传回一组对象。如果是这种情况,则需要调用对象键:

data.nationalholidays[0].holiday_date
这需要将功能调整为类似以下内容:

  function nationalDays(date) {
    // Convert Date Object to String per Format
    var myDate = $.datepicker.formatDate("yy-mm-dd", date) + " 00:00:00";
    // Check for Date in Array
    var needle = -1;
    // Iterate Array of Objects
    $.each(holidayDays, function(i, d){
      if(d.holiday_date == myDate){
        needle = i;
      }
    });
    // Set Default
    var result = [true];
    // If Needle was found, make exception
    if (needle >= 0) {
      result = [false, "holiday", "National Holiday"];
    }
    // Return Results
    return result;
  };
更完整的示例:

$(function() {
  holidayDays = holidayDays;

  function nationalDays(date) {
    var myDate = $.datepicker.formatDate("yy-mm-dd", date) + " 00:00:00";
    var needle = holidayDays.indexOf(myDate);
    var result = [true];
    if (needle >= 0) {
      result = [false, "holiday", "National Holiday"];
    }
    return result;
  };

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

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

});

你的成绩似乎有问题。我建议返回一个简单的日期字符串数组:
[“2020-08-25 00:00:00”、“2020-08-26 00:00:00”、“2020-09-25 00:00:00”,…]
。最好以匹配的格式返回日期:
“dd-mm-yy”
,因此我将返回
[“25-08-2020”、“26-08-2020”、“25-09-2020”…]
,否则返回一些可以轻松转换为日期对象进行比较的内容。