gpt4 book ai didi

javascript - 如何使用过滤器检查对象是否在日期范围内?

转载 作者:行者123 更新时间:2023-12-03 00:21:00 25 4
gpt4 key购买 nike

我正在尝试检查当前过滤对象是否属于日期范围并基于数据返回 boolean ,如果数据不在日期范围内,则应过滤掉该对象。使用下面的代码它总是返回数据。知道实现此任务的方法是错误的还是正确的?

main.ts

 function mapResponse() {
const _startDate = "2018-12-15";
const _endDate = "2019-01-15";
_startDate = moment.utc(_startDate || twentyfourMonthsAgo, ["YYYY-MM-DD", "MM-DD-YYYY", "MM/DD/YYYY"]).format("YYYY-MM-DD");
_endDate = moment.utc(_endDate || today, ["YYYY-MM-DD", "MM-DD-YYYY", "MM/DD/YYYY"]).format("MM/DD/YYYY");
const response = [
{
rxNumber: "15139",
rxIssueDate: "",
fillDate: "2019-01-03",
quantityRemaining: "3",
prescribedNoOfRefills: "3",
currentFillNumber: "0"
},
{
rxNumber: "16131",
rxIssueDate: "",
fillDate: "2019-12-03",
quantityRemaining: "3",
prescribedNoOfRefills: "3",
currentFillNumber: "0"
}
]

response = response.filter(
function renameSpecialtyAttributesToPBM(specialtyRx: any) {
const mappedRx = specialtyRx as Partial < any > ;

const dateFilter = checkDateRange(_startDate, _endDate, specialtyRx.fillDate);

if (!dateFilter) {
return false;
}

mappedRx.fillDate = specialtyRx.fillDate;

mappedRx.refillEligible = !!mappedRx.refillStatusText;
mappedRx.renewEligible = !!specialtyRenewStatus;

return true;
});


}
return response;
}

检查日期范围.ts

function checkDateRange(startDate: any, endDate: any, fillDate: RxDetailsEntity): boolean {
if (fillDate > startDate && fillDate < endDate) {
return true;
}

return false;
}

mapResponse 的预期输出应该是

response = [
{
rxNumber: "15139",
rxIssueDate: "",
fillDate: "2019-01-03",
quantityRemaining: "3",
prescribedNoOfRefills: "3",
currentFillNumber: "0"
}]

最佳答案

看起来您正在将字符串日期传递给检查日期函数,并将它们与小于/大于运算符进行比较,这就是问题所在。

Moment 或较新的 Luxon 有很好的实用方法来比较日期,但如果你想用老式的方式来做,你可以这样做:

checkDateRange(startDateString: string, endDateString: string, fillDateString: string): boolean {
const startDate = new Date(startDateString).getTime();
const endDate = new Date(endDateString).getTime();
const fillDate = new Date(fillDateString).getTime();
if (fillDate > startDate && fillDate < endDate) {
return true;
}

return false;
}

原生 javascript Date 类的 getTime() 方法返回自 Unix 纪元以来日期的微秒数。这样您就可以对日期进行数字比较。

如果您已经有时刻日期,则可以使用时刻的 isBetween 方法:

const fillDate = moment(fillDateString).utc();
return fillDate.isBetween(_startDate, _endDate);

关于javascript - 如何使用过滤器检查对象是否在日期范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54313713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com