jQuery.inArray() 函数在 jQuery-ui DatePicker 的 beforeShowDay 函数中无法正常工作



我尝试通过更改类来突出显示保存在DB中的日期数组。为了实现这个目标,我使用了beforeShowDay函数,并且我已经尝试了关于Stack Overflow的所有解决方案。甚至有些看起来很有逻辑,每次出错的时候。

我使用Laravel和jQuery来完成这个目标。我还使用了jQuery-ui DatePicker的multiDatesPicker扩展。

这是我的输入字段:

<input required type="text" name="dates" id="datepicker" class="form-control">
我的<<p> strong> sript :
$(document).ready(function() {
var openDates = @json($open_dates);
$( "#datepicker" ).multiDatesPicker({
beforeShowDay: function (date) {
if ($.inArray(date, openDates) !== -1) {
return [true, 'open-date'];
}else {
return [true, ''];
}
}
});
});

控制器中的代码:

$open_dates_raw = ExcursionDate::where('excursion_id', $excursion->id)->get();
$open_dates = array();
foreach ($open_dates_raw as $d) {
$open_dates[] = $d->date; /*It is a DATE, not DATETIME column*/
}
return view("view.name", [
...
'open_dates' => $open_dates,
... ]);

基本上,我认为在$中的东西。inArray(日期、openDates)因为我尝试了很多不同的选项,但仍然没有找到匹配。

当我console.log日期时变量在beforeShowDay我得到这个:

...
Tue Mar 30 2021 00:00:00 GMT+0300 (EEST)
...

当我console.log打开endates变量,它显示了一个数组,看起来像这样:

(4) ["2021-03-10 00:00:00", "2021-03-17 00:00:00", "2021-03-24 00:00:00", "2021-03-31 00:00:00"]

我也试图操纵这个输出从控制器得到:

(4) ["2021-03-10 ", "2021-03-17", "2021-03-24", "2021-03-31"]

或者

(4) ["2021-3-10 ", "2021-3-17", "2021-3-24", "2021-3-31"]

那么现在回到脚本-我尝试了不同的选项,如

if ($.inArray(date.toString(), openDates) !== -1)

或者

if ($.inArray(openDates, date) !== -1)

我也试过改变控制器:

$open_dates = ExcursionDate::where('excursion_id', $excursion->id)->pluck('date');

but still nothing.

任何想法吗?

我不知道你的openDates的确切格式,但我知道里面的值是字符串,所以我把日期转换成字符串,像这样:

beforeShowDay: function(date) {
var str_date = $.datepicker.formatDate( "yy-mm-dd", date);
//console.log(str_date);
if ($.inArray(str_date, openDates) !== -1) {
return [true, 'open-date'];
} else {
return [true, ''];
}
}

您可以按照openDates

中的日期格式更改格式

最新更新