React中日期过滤Filter函数返回元素数量异常求助
问题原因及解决方案
核心问题:日期解析格式不匹配
你的交易数据中transactionDate的格式是'日 / 月 / 年'(比如'01 / 03 / 2023'代表2023年3月1日),但直接用new Date(singleTransaction.transactionDate)解析时,JavaScript会默认按照**美国日期格式(月/日/年)**处理,导致日期被错误转换:
'01 / 03 / 2023'被解析为2023年1月3日(而非预期的2023年3月1日),早于fromDate(2023年3月1日),被过滤'01 / 04 / 2023'被解析为2023年1月4日,同样不在目标范围内'02 / 04 / 2023'被解析为2023年2月4日,也不在范围内- 仅
'03 / 04 / 2023'被解析为2023年3月4日,落在fromDate和toDate之间,所以仅保留这条数据
修复方案:手动解析交易日期
不要依赖new Date()的自动解析,按照日 / 月 / 年的格式手动拆分日期字符串,再创建正确的Date对象:
const comparison = data.filter((singleTransaction) => { // 拆分交易日期,去除空格分隔符 const dateParts = singleTransaction.transactionDate.split(' / '); // 按年、月(需减1,因为Date的月份是0-11)、日的顺序构造Date对象 const transactionDateObj = new Date( Number(dateParts[2]), Number(dateParts[1]) - 1, Number(dateParts[0]) ); return transactionDateObj.getTime() <= toDate && transactionDateObj.getTime() >= fromDate; });
修复后,所有符合条件的4条数据都会被正确筛选出来:
'01 / 03 / 2023'→ 2023年3月1日'01 / 04 / 2023'→ 2023年4月1日'02 / 04 / 2023'→ 2023年4月2日'03 / 04 / 2023'→ 2023年4月3日
内容的提问来源于stack exchange,提问作者marcinb1986
相关产品推荐
相关产品推荐

