javascript - 棘手/复杂的日期/预订检查
问题描述
我需要帮助找出一张支票。
用户可以预订一个日期,但随后该日期将被占用。我需要检查以确保用户或其他用户无法占用该插槽。
但我有一个额外的变量需要考虑。预订 EG 01/01/2021 - 01/08/2021 的用户无法预订像这样工作的“禁令”期间。members.length -1
(本质上是成员数量 - 1 EG 如果你有 5 个人,则禁令为 4 ..
我有以下检查要遵循:
- 年
- 几个月
- 天
- 同一用户可能无法预订同一日期的禁令期,但其他用户可以
这是模型:
export class Entrymodel {
id: string;
surname: string;
color: string;
startDate: Startdate;
endDate: Enddate;
info: string;
status: boolean;
}
export class Startdate{
day: number;
month: number;
year: number;
}
export class Enddate{
day: number;
month: number;
year: number;
}
发生这种情况的方法:
createEntry(startDate, endDate, entryinfo: string){
var currentYear = new Date().getFullYear();
var startValue = startDate;
var startDay = startValue.substring(0,1);
var startMonth = startValue.substring(2,3);
var startYear = startValue.substring(4,8);
var endValue = endDate;
var endDay = endValue.substring(0,1);
var endMonth = endValue.substring(2,3);
var endYear = endValue.substring(4,8);
for (const element of this.entries) {
if(this.persist.memberinfo.surname == element.surname){
if(startYear >= element.startDate.year + this.persist.ban){
if(startMonth != element.startDate.month && endMonth != element.endDate.month){
if(startDay <= element.startDate.day && endDay >= element.endDate.day){
}
}
}
}
}
this.uniqueID = uuidv4();
const newEntry = {
id: this.uniqueID,
surname: this.persist.memberinfo.surname,
color: this.persist.memberinfo.color,
startDate: {
day: startDay,
month: startMonth,
year: startYear
},
endDate: {
day: endDay,
month: endMonth,
year: endYear
},
info: entryinfo,
status: true
} as Entrymodel;
this.entryservice.createEntry(newEntry);
}
我需要帮助的代码位:
for (const element of this.entries) {
if(startYear == element.startDate.year){
console.log("Year || Has Entries");
if(startMonth === element.startDate.month || endMonth == element.endDate.month){
console.log("Month || Was Taken");
if(startDay <= element.startDate.day && endDay >= element.endDate.day){
//Okay
console.log("Day || Okay");
this.logentry(startDay,startMonth,startYear,endDay,endMonth,endYear,entryinfo);
return;
}
else{
console.log("Something Went wrong");
return;
}
}
else{
this.logentry(startDay,startMonth,startYear,endDay,endMonth,endYear,entryinfo);
console.log("Month || Okay");
return;
}
}else{
console.log("Year || Okay");
this.logentry(startDay,startMonth,startYear,endDay,endMonth,endYear,entryinfo);
return
}
}
我遇到的一些问题当我在一个新的月份时,我会从循环中得到回报,因此它应该自动创建事件,因为那个月没有事件。数据保存时无法区分以下场景:
Bob Booked 5/1/2021 - 10/1/2021
Bill books 4/1/2021 - 9/1/2021
Susan books Books 1/1/2021 - 12/1/2021
所有这些都将通过,因为我的支票无法读取不存在的值并且数据库仅以开始和结束日期结束,因此在日期之间似乎是免费游戏
Stackblitz App 我刚刚复制了我的 App 文件。
https://stackblitz.com/edit/angular-ivy-pzypta?file=src/app/createentry/createentry.component.ts
结合了一种方法来获取中间日期以保存以及仍然不知道如何使用它们来检查
logentry(sm, sd, sy, em, ed, ey, info){
console.log("ed"+ ed + "em" + em + "ey" + ey);
var diff = ed - sd;
console.log("Diff amount" + diff);
let difference: Inbetween[] = [];
var startdate = sd;
for (let i = 0; i < diff; i++) {
console.log(startdate);
if(sm == em){
difference.push({
day: startdate,
month: sm,
year: sy,
});
startdate++;
}
else{
break;
}
}
difference.splice(0, 1);
this.uniqueID = uuidv4();
const newEntry = {
id: this.uniqueID,
surname: this.persist.memberinfo.surname,
color: this.persist.memberinfo.color,
startDate: {
day: sd,
month: sm,
year: sy
},
endDate: {
day: ed,
month: em,
year: ey
},
inbet: difference,
info: info,
status: true
} as Entrymodel;
console.log(newEntry);
this.entryservice.createEntry(newEntry);
}
}
export class Inbetween{
day: number;
month: number;
year: number;
}
解决方案
推荐阅读
- python-3.x - 如何使用子进程获取命令的标准输出?
- intellij-idea - Grails IntelliJ 运行应用程序加载器约束违反
- vb.net - 如何同时从数千个 URL 中获取网页源
- html - 一个文件可以是具有相同内容的有效 HTML 和有效 RSS 吗?
- r - Rcpp 中的 lengths() 糖函数?
- vue.js - 修改对象时,Vue.js watch 不会触发
- logstash - 无法读取管道 yaml 文件
- apache-kafka - 无法创建 jdbc-sink 连接器:错误连接器的插件类加载器:'io.confluent.connect.jdbc.JdbcSinkConnector'
- android - 如何使用共享的 ViewModel,并避免每次与导航组件重用它的同一个实例
- android - 具有多种实现模式和不同实体集的 OPEN_APP_FEATURE?