Javascript 当我在开始日期和结束日期中选择相同的日期时,我的日期筛选器不显示结果。如何修复它?
我正在使用一个定制的过滤管。当我在开始日期和结束日期中选择相同的日期时,它不会显示结果,尽管记录可用于该日期 我需要在开始日期之前或之前输入1天以查看结果。请建议我需要在过滤器中进行哪些更改Javascript 当我在开始日期和结束日期中选择相同的日期时,我的日期筛选器不显示结果。如何修复它?,javascript,angular,typescript,datetime,filter,Javascript,Angular,Typescript,Datetime,Filter,我正在使用一个定制的过滤管。当我在开始日期和结束日期中选择相同的日期时,它不会显示结果,尽管记录可用于该日期 我需要在开始日期之前或之前输入1天以查看结果。请建议我需要在过滤器中进行哪些更改 import { Pipe, PipeTransform } from "@angular/core"; @Pipe({ name: "tableFilter" }) export class TableFilterPipe implements PipeTr
import { Pipe, PipeTransform } from "@angular/core";
@Pipe({
name: "tableFilter"
})
export class TableFilterPipe implements PipeTransform {
transform(list: any[], filters: any) {
const keys = Object.keys(filters).filter(key => filters[key]);
const filterUser = (user: { [x: string]: any; }) =>
keys.every(key => {
if (key == "sdob") {
return new Date(user["dob"]) >= new Date(filters[key]);
} else if (key == "edob") {
return new Date(filters[key]) >= new Date(user["dob"]);
} else {
return user[key] === filters[key];
}
});
return keys.length ? list.filter(filterUser) : list;
}
}
我认为在过滤管内部,比较日期对象的方式导致了问题。而不是像这样进行比较,在这种情况下,相等者很可能不起作用: 新日期(用户[“dob”])>=新日期(过滤器[键]) 您可以对日期对象使用“getTime()”方法并进行比较。或者使用此线程中显示的其他方法:
将TableFilterPipe更改为此并检查
if (key == "sdob") {
return new Date(user["dob"]) >= new Date(new Date(filters[key]).setHours(0,0,0,0));
} else if (key == "edob") {
return new Date(new Date(filters[key]).setHours(0,0,0,0)) >= new Date(user["dob"]);
}
在使用Date()计算或操纵时,一种非常好的方法是毫秒。因此,对日期过滤器的新更新可能是计算日期时间而不是日期 对于很多人来说,在处理日期范围时会感到困惑。让我举个例子:一些国家对00:00:00到24:00:00的解释在逻辑上是相同的,但在可用性方面是完全不同的 想象一下,你的网站上有一场比赛,参赛者必须在特定的全球时间之前参赛!。。。日期和时间都很重要!UTC以毫秒为单位
//dataset or Jason retrieved from your database
let dataset =[{user:'a',datetime:1609314000000},{user:'b',datetime:1609314000000}]
// When its time to compare inside your filter
// First find your record and extract its datetime
let foundUser = dataset.filter(obj => obj.user === 'b');
console.log(foundValue[0].datetime) // result: 1609314000000
// Now you can do whatever you want with any logic operator, >=, <=, == etc...
//从数据库中检索数据集或Jason
让dataset=[{user:'a',datetime:1609314000000},{user:'b',datetime:1609314000000}]
//什么时候该在过滤器内进行比较
//首先找到您的记录并提取其日期时间
让foundUser=dataset.filter(obj=>obj.user=='b');
console.log(foundValue[0].datetime)//结果:1609314000000
//现在,您可以使用任何逻辑运算符>=,做任何您想做的事情,您能为我的代码提供一个可重用的解决方案吗