如何使用Laravel将集合格式化为含数组的指定结构对象
Laravel转换时间格式适配前端DateTimePicker禁用时间区间需求
我有一张schedules表,每行都包含start_time和end_time字段。目前通过Laravel代码能获取并映射成字符串格式的时间数组,但需要转换成特定结构的对象——外层是带moments属性的对象,moments是二维数组,每个子数组包含两个带hour和minute属性的对象,分别对应每行的start_time和end_time。这个格式要用来配置前端DateTimePicker组件的disabledTimeIntervals,实现指定时间区间禁用。
表结构及示例数据
+----------+------------------+----------------+-------------+ | id | start_time | end_time | user_id | +----------+------------------+----------------+-------------+ | 1 | 6:45 | 7:45 | 1 | | 2 | 10:30 | 11:30 | 1 | +----------+------------------+----------------+-------------+
当前Laravel代码及输出结果
$user = User::find(1); $schedules = Schedule::select('start_time', 'end_time') ->whereBelongsTo($user) ->get(); $collection = $schedules->map(function ($time) { return [date("g:i", strtotime($time['start_time'])), date("g:i", strtotime($time['end_time']))]; }); $data = $collection->values()->all(); // 输出结果 [ [ "6:45", "7:45", ], [ "10:30", "11:30", ], ]
期望得到的格式
{ "moments": [ [ { "hour": 6, "minute": 45 }, { "hour": 7, "minute": 45 } ], [ { "hour": 10, "minute": 30 }, { "hour": 11, "minute": 30 } ] ] }
前端使用该数据的代码
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 .map( ([start, end]) => [ moment(start), moment(end) ] ) } $('.datetimepicker').datetimepicker(options)
内容的提问来源于stack exchange,提问作者Lucky Person
相关产品推荐
相关产品推荐

