首页 > 解决方案 > 棘手/复杂的日期/预订检查

问题描述

我需要帮助找出一张支票。

用户可以预订一个日期,但随后该日期将被占用。我需要检查以确保用户或其他用户无法占用该插槽。

但我有一个额外的变量需要考虑。预订 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;
}

Firestore 结果

标签: javascriptangulartypescriptif-statement

解决方案


推荐阅读