在2个日期之间过滤文字脚本 [英] Type script filtering between 2 dates

查看:45
本文介绍了在2个日期之间过滤文字脚本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在您在图片中看到的搜索屏幕上进行了过滤,但无法正常工作.当您在付款当天写03.03.2020时,它会带走所有记录.我想将付款日期和我的登录日期一起过滤,将记录放在两者之间.我该如何修复代码?

I filter on the search screen you see in the picture, but it doesn't work properly. When you write 03.03.2020 on the day of payment, it brings all the records. I want to filter the payment date together with my login date, bring the records in between. How can I fix the code?

.html

<div class="rez">
    <input id="hotelName" type="text" placeholder="Enter Hotel Name" [(ngModel)]="hotelName" (ngModelChange)="changeHotelName()" /><br />
    <input class="textbox-n" placeholder="Enter check in date" [(ngModel)]="startDate" type="text" onfocus="(this.type='date')" id="entry" (ngModelChange)="changeStartDate()" />
    <input class="textbox-n" placeholder="Enter payDate" [(ngModel)]="endDate" type="text" onfocus="(this.type='date')" id="exit" (ngModelChange)="changeEndDate()" /><br />
    <label id="lblAdults">Number of adults</label> <label id="lblChilds">Number of childs</label><br />
    <input id="adult" type="number" [(ngModel)]="adult" (ngModelChange)="changeNumberOfAdults()" />
    <input id="child" type="number" max="3" [(ngModel)]="childCount" [(ngModel)]="chd" (ngModelChange)="changeNumberOfChilds()" />
    <label id="chd1" *ngIf="childCount>=1">Child Ages</label><br />
    <select class="custom-select" id="chd_1" *ngIf="childCount >= 1">
        <option selected>0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
        <option value="10">10</option>
        <option value="11">11</option>
        <option value="12">12</option>
    </select>
    <select class="custom-select" id="chd_2" *ngIf="childCount>=2">
        <option selected>0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
        <option value="10">10</option>
        <option value="11">11</option>
        <option value="12">12</option>
    </select>
    <select class="custom-select" id="chd_3" *ngIf="childCount>=3">
        <option selected>0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
        <option value="10">10</option>
        <option value="11">11</option>
        <option value="12">12</option>
    </select>
    <button id="search" class="btn btn-warning" type="button">Search</button> 
</div>

.ts

private isEqual(date1: Date, date2: Date) {
    return date1.getDate() == date2.getDate() && date1.getMonth() == date2.getMonth() && date1.getFullYear() == date2.getFullYear();
}

changeStartDate() {
    const filtered = this.hotels.filter(x => this.isEqual(new Date(x.checkInDate), new Date(this.startDate)));
    if (filtered) this.dsHotels.data = filtered;
    else return false;
}

changeEndDate() {
    const filtered = this.hotels.filter(x => this.isEqual(new Date(x.payDate), new Date(this.endDate)));
    this.dsHotels.data = filtered;
}

[图片]

https://i.stack.imgur.com/0IeDK.png
https://i.stack.imgur.com/ZDYCD.png
https://i.stack.imgur.com/wPguo.png

推荐答案

所以我认为问题在于您需要检查过滤器中的 checkInDate payDate 是否匹配.在当前代码中,一次只检查其中一个值

So I think the issue is you need to check that both checkInDate and payDate match in your filter. In the current code, only one of the values are being checked at a time

我认为解决方法可能是这样的:

I think the fix may be something like this:

private isEqual(date1: Date, date2: Date) {
    return date1.getDate() == date2.getDate() && date1.getMonth() == date2.getMonth() && date1.getFullYear() == date2.getFullYear();
}

private isDataEqualToDate(value1: any, date2: Date) {
   if (value1 == null) return true;
   return isEqual(new Date(value1), date2);
}

private getFilteredHotels() {
   return this.hotels.filter(
     x => this.isDataEqualToDate(this.startDate, new Date(x.checkInDate))
       && this.isDataEqualToDate(this.endDate, new Date(x.payDate))
   );
}

changeStartDate() {
    this.dsHotels.data = this.getFilteredHotels();

}

changeEndDate() {
    this.dsHotels.data = this.getFilteredHotels();
}

这篇关于在2个日期之间过滤文字脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆