問:你發現以前問過同樣的問題嗎?
答:是的,這里的
轉到實際代碼
這是我將放置多維陣列的地方:
const timeIntervalsData = []
// the `timeIntervalsData` array will hold the
// response of the ajax call from my backend/provider
$.ajax({
type: 'POST',
url: 'call-url-of-backend',
data: {_token: CSRF_TOKEN},
dataType: 'JSON',
success: function (data) {
if (data.status == true) {
timeIntervalsData = data.time
}
},error: function(xhr, status, error) {
var r = jQuery.parseJSON(xhr.responseText)
console.log(r.message)
}
})
let options = {
format: 'hh:mm A',
// here is where I load the multidimensional array
disabledTimeIntervals: timeIntervalsData,
// original syntax
// from https://getdatepicker.com/4/Options/#disabledtimeintervals
// and https://momentjs.com/docs/#/parsing/object/
disabledTimeIntervals: [
[moment({ hour:6, minute:45 }), moment({ hour:7, minute:45 })],
[moment({ hour:10, minute:30 }), moment({ hour:11, minute:30 })],
],
}
$('.datetimepicker').datetimepicker(options)
后端代碼:
$user = User::find(1);
$schedules = Schedule::select('start_time', 'end_time')
->whereBelongsTo($user)
->where('weekday', 1)
->get()
->toArray();
$collection = collect($schedules)->map(function ($time) {
return [date("g:i", strtotime($time['start_time'])), date("g:i", strtotime($time['end_time']))];
});
$data = $collection->values()->all();
$carrier = [];
foreach ($dataas $key => $a) {
$detail1 = preg_split('/:/i', $a[0]);
$detail2 = preg_split('/:/i', $a[1]);
// here I try to remove " using str_replace
array_push($carrier, array(str_replace('"', "", 'moment({ hour:'.$detail1[0].', minute:'.$detail1[1].' }), moment({ hour:'.$detail2[0].', minute:'.$detail2[1].' })')));
}
return response()->json([
'status' => true,
'time' => $carrier,
], 200);
// `$carrier` result
[
[
"moment({ hour:6, minute:45 }), moment({ hour:7, minute:45 })",
],
[
"moment({ hour:10, minute:30 }), moment({ hour:11, minute:30 })",
],
]
編輯
此編輯提供了測驗 KooiInc 代碼的結果
const timeIntervalsData = JSON.stringify({
moments: [
{ hour: 6, minute: 45 }, { hour: 7, minute: 45 },
{ hour: 10, minute: 30 }, { hour: 11, minute: 30 }
]
});
let options = {
format: 'hh:mm A',
disabledTimeIntervals: [
JSON.parse(timeIntervalsData).moments.forEach( interval => moment(interval) )
],
}
console.log(options)
控制臺結果

編輯#2
我已經編輯了問題以顯示 KooiInc 更新答案的結果。
const timeIntervalsData = JSON.stringify( { moments: [
{ hour: 6, minute: 45 }, { hour: 7, minute: 45 },
{ hour: 10, minute: 30 }, { hour: 11, minute: 30 } ]
});
JSON.parse(timeIntervalsData).moments.forEach( interval =>
console.log(moment(interval)) );
let options = {
format: 'hh:mm A',
disabledTimeIntervals: [
JSON.parse(timeIntervalsData).moments.map( interval => moment(interval) )
],
}
console.log(options);
現在我記得為什么我要moment在后端代碼中格式化,因為映射物件是將時刻組合time intervals成一個如下所示的陣列,因此它完全忽略了第 3 和第 4moment時間間隔以及第 1 和第 2 時間間隔僅被禁用。
使用上面的代碼...
// console.log(options.disabledTimeIntervals); result
disabledTimeIntervals: [
[M, M, M, M] // we can see here that the map combined it into a single array, the first two times are disabled but the 3rd and 4th moment is not working.
],
在這個硬編碼的時刻time intervals,它沒有組合成一個陣列。
disabledTimeIntervals: [
[moment({ hour:6, minute:45 }), moment({ hour:7, minute:45 })],
[moment({ hour:10, minute:30 }), moment({ hour:11, minute:30 })]
],
// console result
disabledTimeIntervals: [
[M, M],
[M, M]
]
uj5u.com熱心網友回復:
JSON(JavaScript 物件表示法)始終是字串表示。您不能將函式呼叫作為函式呼叫存盤在其中。
因此,重新考慮您的代碼并交付另一個您可以在客戶端使用的物件。讓服務器將時刻作為陣列陣列傳遞,包含間隔([begin, end])并使用moment客戶端。
就像是:
// server delivers object with property
// 'moments', containing an array of arrays ([start, end])
const timeIntervalsData = JSON.stringify( { moments: [
[ { hour: 6, minute: 45 }, { hour: 7, minute: 45 }, ],
[ { hour: 10, minute: 30 }, { hour: 11, minute: 30 }, ]
]
});
// based on comments
// -----------------
let options = {
format: 'hh:mm A',
disabledTimeIntervals: JSON.parse(timeIntervalsData)
.moments
.map( ([start, end]) => [ moment(start), moment(end) ] )
// ^ mapping the individual intervals (start, end)
}
console.log(options.disabledTimeIntervals);
.as-console-wrapper { max-height: 100% !important; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js"></script>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/520823.html
