我正在进行一个API调用,该调用返回了大量数据。从这些数据中,我想过滤掉并仅获取到期日大于或等于今天且小于或等于30天的记录。
但是我的过滤器返回的记录不正确。
addDays = (date, days) => {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
let today = new Intl.DateTimeFormat('en-US').format(new Date()); //returns "07/31/2020" as expected
let add30 = new Intl.DateTimeFormat('en-US').format(this.addDays(today, 30)); //returns "08/30/2020 as expected
let dueInThirtyDays = allActivities.filter(activity => new Intl.DateTimeFormat('en-US').format(new Date(activity.dueDate)) >= today && new Intl.DateTimeFormat('en-US').format(new Date(activity.dueDate)) <= add30 && new Intl.DateTimeFormat('en-US').format(new Date(activity.closedDate) === null));
//where format of activity.dueDate = "2020-01-14" which is whay its wrapped in the DateTimeFormat method
我正在过滤的对象数组示例:
{
typeCode: "BCA "
categoryCode: "PN "
activityDescription: "PNACT03 TIER2 PRIMARY"
effectiveDate: "2010-10-14"
statusDate(pin): null
closedDate(pin): "2012-06-30"
dueDate(pin): "2011-01-14"
}
我注意到格式字符串返回的日期早于给定日期的一天,但我得到的结果是距今天数月前的广告年以及距今天30天之后的好几个月。它还返回结果,其中closedDate
不为null
您的问题出在用于比较的日期格式之内。
让我们以这两个日期为例:
人们可以看到2020年的日期不小于2019年的日期,但如果进行比较,则可以:
if ("10/31/2020" <= "11/30/2019")
与写作相同:
if ("10312020" <= "11302019")
您可以在浏览器控制台中输入以下内容进行尝试
console.log("10/31/2020" <= "11/30/2019");
如果要与字符串进行比较,则可能应使用unix时间戳进行日期比较,或使用y / m / d格式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句