问题描述
我正在使用JQuery-UI datepicker和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
<script type="text/javascript">
var holidayDays = [];
$(document).ready(function() {
$(document).on('change','#leave_type',function() {
var air_id = $(this).val();
var a = $(this).parent();
var op = "";
$.ajax({
type: 'get',url: '{{ route('
get.leavecounts.all ') }}',data: {
'id': air_id
},dataType: 'json',//return data will be json
success: function(data) {
holidayDays = data.nationalholidays;
console.log(data.nationalholidays);
},error: function() {
}
});
});
});
</script>
console.log(data.nationalholidays);
给予
0:
holiday_date: "2020-08-25 00:00:00"
__proto__: Object
1:
holiday_date: "2020-08-26 00:00:00"
__proto__: Object
2: {holiday_date: "2020-09-25 00:00:00"}
3: {holiday_date: "2020-11-30 00:00:00"}
4: {holiday_date: "2020-09-25 00:00:00"}
5: {holiday_date: "2020-09-30 00:00:00"}
6: {holiday_date: "2020-10-14 00:00:00"}
length: 7
__proto__: Array(0)
< script type = "text/javascript" >
$(document).ready(function() {
holidayDays = holidayDays;
function nationalDays(date) {
var m = date.getMonth(),d = date.getDate(),y = date.getFullYear();
for (i = 0; i < holidayDays.length; i++) {
if ($.inArray((m + 1) + '-' + d + '-' + y,nationalDays) != -1 || new Date() > date) {
console.log('bad: ' + (m + 1) + '-' + d + '-' + y + ' / ' + holidayDays[i]);
return [false];
}
}
return [true];
};
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');
}); <
/script>
我想同时禁用周末和国家假日。
但是我观察到只有周末才禁用,而国定假日则没有。
我该如何纠正?
谢谢
解决方法
考虑如下示例:
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;
};
查看更多:https://api.jqueryui.com/datepicker/
$。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,"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,"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');
});