在JS中,为什么发生在每个月的第一个日期排序到前一个月,当我映射到一个数组?



如何使每个月的第一天发生的费用与该月的其余费用一起显示?在本例中,我有一个组件,它引入数据库中所有费用的状态数据然后我调用一个函数来映射它,将每个费用放在相应的月份:

const expensesData = useSelector((state)=>state?.financialsReducer?.expenses)
const monthlyExpenses = (m) => {
const expenseArray = expensesData?.map((e)=>{
if(new Date(e.date).getMonth() === m) {
return e.amount
} else {
return null
}
})
return expenseArray.reduce((accumulator, current)=> accumulator + current, 0).toFixed(2)
}
const juneExpenses = monthlyExpenses(5)
const julyExpenses = monthlyExpenses(6)

问题是,每个月第一天发生的费用出现在前一个月的结果中。例如,如果我在2022年7月1日有一笔费用,它将出现在juneExpenses的结果中。

这里有一个具体的例子。该对象仅在以m = 5调用monthlyExpenses函数时出现(即针对6月份)。费用的日期很清楚,是7月7日。

{_id: '1212saf23423df04fb10', date: '2022-07-01T00:00:00.000Z', year: '2022', category: 'rent', amount: 1176, …}
amount: 1176
category: "rent"
date: "2022-07-01T00:00:00.000Z"
details: ""
year: "2022"
__v: 0
_id: "1212saf23423df04fb10"
[[Prototype]]: Object

如果它只发生在一个月的第一天,那么很可能是时区问题。也就是说,您的数据来自UTC,但您的测试环境是UTC-(什么的),因此您的日期实际上是上个月的最后一天。

你可以通过标准化你的日期设置来解决这个问题。

编辑:by " standarzing where,"我的意思是"在哪个时区标准化"。你的约会已经定好了。因此,基本上,向您的数据集添加一个时区,或者向您的测试环境添加一个时区偏移量。

最新更新