javascript - 创建时间戳数组删除开始和结束期间之间的小时数
问题描述
我目前正在开发一个应用程序,人们可以在其中安排注册专业人员的服务。这个想法很简单,用户将打开应用程序,选择专业人员,然后将显示所有可用时间的议程。
专业人员有一天的开始和结束工作时间,服务也有持续时间,因此他可能在一天内有很多服务。
选择专业和服务后我目前在做什么(我将在下面发布相关代码):
- 我得到了专业人士的工作时间,从周日到周六,他工作几天以及他开始和结束工作的时间。
- 我得到了他的议程,他已经安排了什么,服务的开始和结束时间。
- 我创建了一个数组,其中第一个条目是专业的开始时间,它们我总结了服务的持续时间并继续这样做直到它到达结束时间。
- 然后我进行循环以删除可能已安排服务的任何可用时间。
这是我使用的变量的示例:
weekDay = {
startHour: '08:00AM', endHour: '05:00PM'
};
serviceDuration = 30;
agenda = [
{"from": 1572683400000, "to": 1572685200000},
{"from": 1572685200000, "to": 1572687000000},
{"from": 1572688800000, "to": 1572690600000},
{"from": 1572694200000, "to": 1572696000000},
{"from": 1572696000000, "to": 1572699600000},
{"from": 1572705000000, "to": 1572706800000},
{"from": 1572711300000, "to": 1572713100000}
];
baseArray = ['08:00AM', '08:30AM', '09:00AM', '09:30AM', ..., '04:30PM'];
// The baseArray is also converted to timestamp, this is just to demonstrate
// Agenda is called removeArray in the code
对于我正在做的事情,它工作得很好,但是刚刚出现了一些新的东西,我们需要根据议程中的服务结束的时间来生成可用时间。
因此,假设我有一项持续时间为 45 分钟的服务,我从 08:00 开始工作,并且已经在 8:30 到 9:00 预订了一些东西。像我现在做的那样添加持续时间,我会有这个:['08:00', '08:45', '09:30']
。但我需要的是下一个可用时间是已经预订的服务结束时,所以它应该是这样的:['08:00', '09:00']
;
我想出了一个代码,我检查当前添加的时间是否在当前预订服务的中间,如果是,我返回服务端作为下一个要比较的值。这是我现在拥有的代码:
let startHour = new Date(`${currentDay}T${weekDay.startHour}:00.000Z`).getTime();
const endHourTime = new Date(`${currentDay}T${weekDay.endHour}:00.000Z`).getTime();
if (startHour <= endHourTime) {
while (startHour < endHourTime && endHourTime - startHour >= duration) {
baseArray.push(startHour);
startHour = getNextAvailableTime(startHour, duration, removeArray);
}
}
function getNextAvailableTime(startHour, duration, removeArray) {
const filterArray = [];
for (let i = 0, max = removeArray.length; i < max; i++) {
if ((startHour >= removeArray[i].from && startHour < removeArray[i].to)) {
filterArray.push(removeArray[i].to);
break;
}
}
if (filterArray.length > 0) {
return filterArray[0];
} else {
return startHour + duration;
}
}
}
这让我陷入了一个无限循环,总是得到 removeArray 中第一个值的结尾。知道我在做什么错吗?如果您需要更好的解释,我很乐意这样做
解决方案
推荐阅读
- selenium - 在登录页面签名按钮在自动化时不可点击
- python - 如何仅置换 numpy 2d-array 的某些条目?
- python - 什么是 tensorflow 中的日志记录级别以及为什么人们在笔记本中使用它?
- discord - 匹配单词时将消息内容发送到频道
- ios - 以全屏视频为主要内容的 ios scrollview
- jquery - 如何避免在 JQuery 中重复代码?
- typescript - 由于任何关键字,Typescript eslint 和 strict_check 错误
- nosql - NoSQL DB 中的一对多关系
- asp.net-mvc - 连接字符串连接到 ASP.NET MVC 中的错误数据库
- python-3.x - 导入函数中未定义的内置函数