javascript - 从 5 分钟间隔到 20 分钟间隔过滤日期数组
问题描述
我在 08:00-17:00 之间有大量用于预订申请的时段。每个时段为 5 分钟,我已删除与已预订时段重叠的所有时段。
例如,在 11:00-12:50 之间已经有一个事件,所以这个时间段不可用。
{
"date": "2019-03-15",
"start": "2019-03-15T09:15:00.000Z",
"starttime": "10:15",
"end": "2019-03-15T09:45:00.000Z",
"endtime": "10:45"
},
{
"date": "2019-03-15",
"start": "2019-03-15T09:20:00.000Z",
"starttime": "10:20",
"end": "2019-03-15T09:50:00.000Z",
"endtime": "10:50"
},
{
"date": "2019-03-15",
"start": "2019-03-15T09:25:00.000Z",
"starttime": "10:25",
"end": "2019-03-15T09:55:00.000Z",
"endtime": "10:55"
},
{
"date": "2019-03-15",
"start": "2019-03-15T09:30:00.000Z",
"starttime": "10:30",
"end": "2019-03-15T10:00:00.000Z",
"endtime": "11:00"
},
{
"date": "2019-03-15",
"start": "2019-03-15T11:50:00.000Z",
"starttime": "12:50",
"end": "2019-03-15T12:20:00.000Z",
"endtime": "13:20"
},
但是,在我将其返回给最终用户之前,我需要删除所有元素,因此每个插槽之间有 20 分钟的间隔。因此,我希望他们有 20 分钟的间隔,而不是每 5 分钟一次。所以结束时间必须是 10:20... 10:40... 11:00.. 所有活动都不得与已预订的活动有间隔。因此,每个插槽都必须有一个连接到现有事件的插槽。
我该怎么做?
解决方案
将Json对象放入数组中,执行以下代码。
其中 search 是用于查找时间段的变量。
function toDate(dStr,format) {
var now = new Date();
if (format == "h:m") {
now.setHours(dStr.substr(0,dStr.indexOf(":")));
now.setMinutes(dStr.substr(dStr.indexOf(":")+1));
now.setSeconds(0);
return now;
}else
return "Invalid Format";
}
let serach="13:10";
let value = sample.filter((val) => {
if( (toDate(val.endtime,"h:m").toTimeString() >= toDate(serach,"h:m").toTimeString()) && (toDate(val.starttime,"h:m").toTimeString() <= toDate(serach,"h:m").toTimeString()) ){
return val.starttime;
}
})
value 将保存时隙与 json 中的日期匹配的数组
推荐阅读
- android - Android 通知不处理特殊字符
- javascript - 如何将叠加层悬停在flex容器中的flex项目上
- android - 如何在导航抽屉活动中更改 activity_main_drawer 的 Textsize
- r - 根据其他列的最旧组成员的值重新编码整个组的列
- c# - 二叉树搜索生成 StackOverflowException
- internationalization - Silverstripe 模板 i18n 翻译
- .net - ServicedComponent 服务器激活权限被拒绝
- python-3.x - 如何在来自 pandas 数据帧的 cx_Oracle 中使用命名绑定和批量插入(executemany)
- arrays - 比较 ClickHouse 行中的两个数组
- php - 保存在数据库中时,帖子未显示在浏览器中:laravel